單精度就是指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要小。