我的控制器中有以下代码:
private void setProgress(float value)
{
progress = (float)Math.Round(value,4);
}
但是当 value 类似于标题中的数字(一个非常接近 int 的数字)时,它不起作用,progress 只会获得原始值。
为什么会这样?
我的控制器中有以下代码:
private void setProgress(float value)
{
progress = (float)Math.Round(value,4);
}
但是当 value 类似于标题中的数字(一个非常接近 int 的数字)时,它不起作用,progress 只会获得原始值。
为什么会这样?
因为 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);