2012-02-14 76 views
1

在使用Excel时,如果我计算6/100得到它返回0.060000 的百分比值,但是当我做在Objective-C同样的计算,我得到0.059999998658895493奇怪的计算结果的Objective-C

有谁知道为什么会出现是不同的?

+4

这不是特定于Objective-C的。您可能需要仔细阅读:基本上,0.06不能完全使用“float”表示,因此您会看到它可以得到最接近的。 – 2012-02-14 11:01:24

+3

另外,Excel很可能在骗你。请注意,如果您在C小数点后六位取得数字,您会得到与Excel给出的结果相同的结果。 – 2012-02-14 11:02:54

+0

请参考此答案:http://stackoverflow.com/questions/8758156/rounding-double-values-in-c-like-ms-excel-does-it – BeRecursive 2012-02-14 11:05:01

回答

4

浮点值不能准确表示所有分数。这与我们用小数点中的一些数字看到的相同的行为1/3不能完全用十进制表示,它仅近似为0.33333333 ...

计算机分数是基数2,其中我们的十进制数是基数10。不同的分数可以在不同的基础上完全准确地表示。

因此有可可若干类,NSDecimalNumber操作设基地10,并且可以完全代表6/100为0.060000

您在Excel中看到可能的差异可能是因为其使用十进制数学(可能不会),或者它正在四舍五入以便显示不准确不明显。