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