先看代码 dt.Columns.Add("a", typeof(double));
dt.Columns.Add("b");
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr[0] = 11.234 * i * 10;
dr[1] = i.ToString();
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt.DefaultView;
结果DataGridView显示的数据有一个单元格是786.38000000000011
请问为什么会出现这样的?怎么解决?
dt.Columns.Add("b");
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr[0] = 11.234 * i * 10;
dr[1] = i.ToString();
dt.Rows.Add(dr);
}
this.dataGridView1.DataSource = dt.DefaultView;
结果DataGridView显示的数据有一个单元格是786.38000000000011
请问为什么会出现这样的?怎么解决?
解决方案 »
- 求助 SQl 三张表查找多个列值 用户ID对应多个角色ID,每个角色ID又对应多个权限ID ,怎么选出所有权限列值
- ASP.NET做一个系统,使用户登录后可以不用重新登录其他业务系统,直接进入的方法!
- 在遍历目录过程中,如何比较当前遍历到的目录是否包含在listbox列表里?
- 如何让子窗体随着主窗体的尺寸变化自动改变大小?
- 有没有详细介绍datagrid控件的书?
- 利用webbrowser检测网站的问题
- 如何不用鼠标手工点击,而由软件自动生一个BUTTON的CLICK事件
- 新闻发布系统(增删改页面)
- 使用循环创建table表的列
- 做一个C#程序,实现如下格式的打印?(热敏打印机)
- 关于Excel文件打开的问题-乱码
- 如何在桌面应用程序中打开网页 并登录
假设有的几个结果是567.712,你就给强制成了561.71
我都说了不要损失精度了,对好是dt的数据是什么样的,DataGridView就是现实什么样的
我都说了不要损失精度了,对好是dt的数据是什么样的,DataGridView就是现实什么样的这是不可能实现的,当你有数据位数过多时就会显示科学计数法的。还是格式化吧。
没有测试。
因为我的项目中出现了这个问题,我想知道产生的原因,好去解决。
dataGridView1.Columns["a"].DefaultCellStyle.Format = "N2"
还是为什么10行数据中只有第8行也就是i=7哪一行的数据显示不一致呢?
只是想弄明白为什么会显示成这样?
是BUG吗?
楼主还是搜搜double在内存中的表示吧。
我们用的十进制在转化成二进制的时候是有精度损失的(因为0.38乘以2是不尽的死循环),而再转回来很明显就不是原来的值了。我觉得可以进行精度的确认,也就是说精确到第几位就行了. double.ToString("F6")统一精确到6位。
/// <summary>
/// 保留2位小数
/// </summary>
/// <param name="StrNumber"></param>
/// <returns></returns>
public string DecPoint2(double StrNumber)
{
string StrDec;
StrDec = StrNumber.ToString("f2");
return StrDec;
}
#endregion
dr[0] = 11.234 * i * 10;
你再改成
dr[0] = 11.234 * i * 100;
试试看
Row.Cells[0].Text我的cells[0]怎么没有Text属性