为什么0.09f - 0.01f == 0.0800000057f?

时间:2015-11-04 08:02:17

标签: c# floating-point ieee-754

我知道浮点变量以符号 - 指数 - 分数格式存储数字(正如它在IEEE 754中所述),它永远不会精确,我可能永远不会比较两个浮点数指定精度。

但为什么0.09f-0.01f正好给你0.0800000057f的值?当我进行减法时,在.NET VM的内部和内存中究竟发生了什么?

1 个答案:

答案 0 :(得分:2)

0.09在ieee-754中表示为00111101101110000101000111101100,最接近0.09000000357627869的十进制值

0.01在ieee-754中表示为00111100001000111101011100001010,最接近0.009999999776482582的十进制值

它们的减法产生00111101101000111101011100001011,它最接近0.08000000566244125

的十进制值

你可以看到实际的减法是如何完成的here