-2

我的控制器中有以下代码:

    private void setProgress(float value)
    {
        progress = (float)Math.Round(value,4);
    }

但是当 value 类似于标题中的数字(一个非常接近 int 的数字)时,它不起作用,progress 只会获得原始值。

为什么会这样?

4

1 回答 1

2

因为 1 和 24 可能无法使用二进制浮点数精确表示,这取决于这些数字的计算方式。如果您需要一个真正的整数,请将其四舍五入,然后将其转换为 int:

private void setProgress(float value)
{
    progress = Convert.ToInt32((float)Math.Round(value,0));
}

如果您需要浮点数与 int 进行比较(甚至是常数,则将差异与一些非常小的数字进行比较:

private bool AreCloseEnoughToEqual(double d1, double d2)
{
    const double _EPSILON = 0.00000001;
    return Math.Abs(d1-d2) < _EPSILON;
}

如果您需要将其显示为整数,请使用 0 位小数显示:

 Console.WriteLine("{0:N0}",d1);
于 2012-05-18T13:35:45.963 回答