Pet*_*ter 7 .net c# floating-point types
如果您在编译器中放入以下代码,结果有点奇怪:
decimal x = (276/304)*304;
double y = (276/304)*304;
Console.WriteLine("decimal x = " + x);
Console.WriteLine("double y = " + y);
结果:
十进制x = 275.99999999999999999999999
双y = 276.0
谁可以给我解释一下这个?我不明白这是怎么回事.
dan*_*n04 10
276/304 = 69/76是基数10和基数2中的重复"小数".
因此结果四舍五入,乘以分母可能不会产生原始分子.这种情况的更常见的例子是1/3*3 = 0.33333333*3 = 0.99999999.
该double版本给出了确切的答案只是一个巧合.乘法中的舍入误差恰好抵消了除法中的舍入误差.
如果这个结果令人困惑,可能是因为你听说" double有舍入错误并且decimal确切".但decimal只是精确地表示像0.1这样的小数部分(二进制为0.0 0011 0011 ...).如果分母中的因子为19,则对您没有帮助.