C# 为什么精确到0.09f-0.01f==0.080000057F?

C# 为什么精确到0.09f-0.01f==0.080000057F?,c#,floating-point,ieee-754,C#,Floating Point,Ieee 754,我知道浮点变量以符号指数分数格式存储数字(如IEEE 754中所述),它永远不会精确,我可能永远不会在不指定精度的情况下比较两个浮点 但是为什么0.09f-0.01f会给出0.080000057f的值呢?当我做减法运算时,在.NET VM的引擎盖下和内存中到底发生了什么?0.09在ieee-754中表示为001111101110000101000111101100,它最接近0.09000000357627869 0.01在ieee-754中表示为001111000011011100001010,

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


但是为什么0.09f-0.01f会给出0.080000057f的值呢?当我做减法运算时,在.NET VM的引擎盖下和内存中到底发生了什么?

0.09
在ieee-754中表示为
001111101110000101000111101100
,它最接近
0.09000000357627869

0.01
在ieee-754中表示为
001111000011011100001010
,最接近
0.00999999776482582

它们的减法产生
00111101101000011101011100001011
,最接近
0.080000566244125

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

您是否查看了0.09f和0.01f的精确值?请参阅并在此处找到DoubleConverter代码,以查看确切值。那么减法的结果可能不会令人惊讶。