【问题标题】:Stata: Round not rounding correctly?Stata:舍入不正确?
【发布时间】:2015-09-06 10:43:34
【问题描述】:

我正在尝试在 Stata 中舍入一个数字:

display round(1.015, .01)

这会产生 1.01 而不是预期的 1.02

至少这是我所期望的(理解我的期望可能不符合 Stata 使用的某些标准)。

关于如何使 Stata 符合我的期望的任何建议?

【问题讨论】:

  • 尝试display %23.18f 1.015 看看1.015 不能完全保持原样;你报告的是副作用。 search precision 在 Stata 中进行更多讨论。

标签: rounding stata


【解决方案1】:

Stata 使用数字的双精度或浮点数表示(即以 2 为底而不是以 10 为底)。不幸的是,1.015 不能以 2 为基数表示,因此它会接近最接近的值,在这种情况下略小于 1.015,因此轮次下降。这是在计算机上处​​理浮点精度时的常见问题 - 例如,请参阅 Ruby 中的这个问题:Ruby Float#round method behaves incorrectly with round(2)

那你怎么解决呢?

如果 3 位小数精度对您很重要,您需要使用定点精度。我不相信 Stata 本身就支持这一点,但自己做很容易:

display round(1015, 10)*0.001

即您的输入数字乘以 10^3,显示的数字乘以 10^-3。因此,所有处理都以您感兴趣的小数位数的整数精度进行。

但是请注意,看似等效的display round(1.015*1000, 0.01*1000)*0.001起作用,因为在读取“1.015”时已经发生了以 2 为底的舍入(即计算机将看到 1.01499999... *1000 = 1014.999...)。当然,如果您从其他地方(例如用户输入或读取文件)获取值 1.015,这也适用。


顺便说一句,Stata 在其舍入模式(也称为平局)上似乎非常安静。虽然它可能使用了 tie-up,但它也可能是 tie-to-even 或其他选项 - 最好不要依赖精确的中途行为,除非你能找到明确的规范.

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 2012-03-07
    • 2011-11-16
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多