我在我的控制器下面的代碼:asp.net-MVC 3 C#Math.round不四捨五入像0.010000001或浮動0.2399999999997
private void setProgress(float value)
{
progress = (float)Math.Round(value,4);
}
但當值是一樣的東西在標題中的數字(數字非常接近一個int)它不起作用,進度只是獲得原始值。
這是怎麼發生的?
我在我的控制器下面的代碼:asp.net-MVC 3 C#Math.round不四捨五入像0.010000001或浮動0.2399999999997
private void setProgress(float value)
{
progress = (float)Math.Round(value,4);
}
但當值是一樣的東西在標題中的數字(數字非常接近一個int)它不起作用,進度只是獲得原始值。
這是怎麼發生的?
因爲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);
研究基本浮點信息。 –
這個問題的一部分是'float'和'decimal'表示數字的方式。這並不意味着它本身並不是它。 –