C#浮动麻烦。为什么1000000 + 0.10f = 1000000?

时间:2017-02-16 10:45:17

标签: c# types double

为什么

Console.WriteLine((1000000f + 0.10f).ToString("N2"));

打印

  

1 000 000.00

但没有1 000 000.10?

当我使用“double”类型或输入“float”减去1000000时 - 这个问题就消失了!

2 个答案:

答案 0 :(得分:4)

使用小数来防止这些准确性/舍入问题。

Console.WriteLine((1000000m + 0.10m).ToString("N2"));

原因:浮点数的精确度仅为7位数(reference) - 您的数字为8

答案 1 :(得分:1)

根据MSDN,float类型只有7位精度。一个百万有七位数,小数部分是四舍五入的。

Double类型的精度为15-16位,因此milion可以有8-9位长的小数部分。小于一百万的数字小于7位数(不含小数部分)。