以下C#代码显示0.1-为什么?
var s = "0.1";
var dbl = Double.Parse(s);
var dcml = Convert.ToDecimal(dbl);
Console.WriteLine(dcml.ToString());
不是0.01不能用二进制表示,因此应该打印0.100000001490116吗?
答案 0 :(得分:5)
dbl
的值正好为0.1000000000000000055511151231257827021181583404541015625。
这是0.1到17个有效数字。
documentation for Convert.ToDecimal(Double)
指出:
此方法返回的十进制值最多包含15个有效数字。如果value参数包含的有效位数超过15个,则使用舍入到最接近的值进行舍入。
conversion from Single
(aka float
)被记录为可以更早地截断:
此方法返回的十进制值最多包含七个有效数字。如果value参数包含七个以上的有效数字,则使用四舍五入到最接近的值四舍五入。
如果您使用初始转换为0.1f的值调用Convert.ToDecimal(Double)
,它将显示0.100000001490116:
double dbl = 0.1f;
decimal dcml = (decimal) dbl;
Console.WriteLine(dcml);