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