C#中浮點數運算函數Floor的運算誤差或可稱BUG.

我都不敢相信,下面的計算結果居然會得不到我想要的110.

double test =  Math.Floor( 11.0f /0.1f); // 結果得到 109.0

test = Math.Round( 11.0f /0.1f -0.5f);  // 得到的結果也是 109.0

// 以下的結果也是 109.0

float f1 = 11.0f, f2 = 0.1f;
double m1 = (double)f1, m2 = (double)f2;
double test =  Math.Floor( m1/m2 );

曾經發現 Math.Ceiling() 也有類似問題.

最後火大了,寫了一個通過轉成字符再轉回來的笨辦法(現在還不知道有沒有其他問題,待觀察, 或者是不是有其他更好辦法).

 

MyMath.Floor

posted on 2011-02-14 12:18  zlinke  阅读(476)  评论(0编辑  收藏  举报

导航