【问题标题】:Strange calculation result Objective-c [duplicate]奇怪的计算结果Objective-c [重复]
【发布时间】:2012-03-05 17:58:14
【问题描述】:

当我使用 excel 时,如果我计算 6/100 来获得它返回的百分比值 0.060000 但是当我在objective-c中做同样的计算时,我得到0.059999998658895493

有人知道为什么会有差异吗?

【问题讨论】:

  • 这不是 Objective-C 特有的。您可能想仔细阅读以下内容:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html> 基本上,0.06 不能使用float 精确表示,因此您看到的是它可以得到的最接近的值。
  • 另外,Excel 很可能在骗你。请注意,如果将 C 中得到的数字四舍五入到小数点后六位,则得到的结果与 Excel 给出的结果相同。
  • 请参考这个答案:stackoverflow.com/questions/8758156/…

标签: objective-c


【解决方案1】:

浮点值不能精确地表示所有小数。这与我们看到的一些十进制数字的行为相同,1/3 不能精确地表示为十进制,它只能近似为 0.33333333...

计算机小数是以 2 为底的,而我们的十进制数是以 10 为底的。不同的小数可以用不同的底数完全准确地表示。

因此,Cocoa 中有一个数字类NSDecimalNumber,它以 10 为底,可以将 6/100 精确地表示为 0.060000

您在 Excel 中看到的差异可能是因为它使用了十进制数学(可能不是),也可能是因为它正在对数字进行四舍五入,因此显示的不准确性并不明显。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2010-11-02
    • 1970-01-01
    • 2011-08-04
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多