0

我正在尝试添加一行的单元格并在网格的新单元格中显示总数。我正在使用 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;

}

我该如何解决这些问题?我究竟做错了什么?

4

2 回答 2

4

实际上,Your Grid 是有效的,它将 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;

}
于 2013-10-05T18:46:27.373 回答
1

正如 Jon Skeet 在评论中所说,问题在于 - 坦率地说 - 你对浮动的理解。浮点数仅使用 32 位来存储必须转换为十进制值的二进制浮点值。这会导致您遇到的“奇怪”值。

最简单的解决方法通常是只使用双打。但是请务必阅读浮点数以及为什么它们不能很好地表示以 10 为基数的数字。

于 2013-10-05T18:46:03.513 回答