c#中decimal ,double,float的一些區別

單精度就是指4個字節的浮點數,即float
雙精度就是指8個字節的浮點數,即double

decimal是高精度

float num1=3.0f;
float num2=2.9f;
float result=num1-num2;
bool b1=result==0.1f;
Console.WriteLine(b1); false
//因爲精確度不夠

decimal num1=3.0m;
decimal num2=2.9m;
decimal result=num1-num2;
bool b1=result==0.1m;
Console.WriteLine(b1); true

浮點數的精度損失可能在很多地方出現,例如d * g / g 不一定等於d,d / g * g也不一定等於d。   

 

記住!所有的浮點型變量都存在精度損失的問題,而decimal是一個不折不扣的浮點型,不論它精度有多高,精度損失依然存在!

 

decimal dd = 10000000000000000000000000000m;

dd += 0.1m;

Console.WriteLine ( "{0:G50}", dd );   

 

 

decimal所能儲存的數比double大,從double到decimal的類型轉換不會出現任何問題。

微軟在decimal的幫助上真的要好好反省了。實際上只有從整形到decimal的轉換纔是擴大轉換,decimal的精度比double大,但所能儲存的最大數卻比double要小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章