我正在尝试添加行的单元格并在网格中的新单元格中显示总数。我正在使用DevExpress的gridControl。网格有12列代表一年中的月份,我想添加月份值并在第13列显示总数。
我的问题是,如果我的浮点值为“111,22”,它将被添加为“111,2188”到数据库,并且在第13个单元格中没有精确显示。
所以,我有两个问题。第一个是“为什么它将它作为111,2188插入数据库?”第二个是“为什么显示总数”。
这是我的代码......当我添加111,2188和200时会发生这种情况,我会得到211,2188 ......
private void calculate_gv_row_total(int row_index) {
float total = 0;
for (int j = 0; start_index + j < start_index + months; j++)
{
float f = float.Parse(gv.GetDataRow(row_index)[start_index + j].ToString());
total = total + f;
}
gv.GetDataRow(row_index)[total_cell_index] = total;
}
我该如何解决这些问题?我做错了什么?
答案 0 :(得分:4)
实际上,你的网格效率很高,它的结果是111,2188到111,22。如果要查看确切的值,请增加列宽或告诉网格精度级别。
如果您不需要那么精确地使用ToString("F")
private void calculate_gv_row_total(int row_index) {
float total = 0;
for (int j = 0; start_index + j < start_index + months; j++)
{
float f = float.Parse(gv.GetDataRow(row_index)[start_index + j].ToString("F"));
total = total + f;
}
gv.GetDataRow(row_index)[total_cell_index] = total;
}
答案 1 :(得分:1)
正如Jon Skeet在评论中所说,问题是 - 直截了当地说 - 你对花车的理解。 float只使用32位来存储二进制浮点值,该值必须转换为十进制值。这会导致您遇到的“怪异”值。
最简单的解决方法通常是使用双打。但请仔细阅读浮点数以及为什么它们不能代表10号基数。