rounding - Stata:舍入不正确?

标签 rounding stata

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

display round(1.015, .01)

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

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

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

最佳答案

Stata 使用数字的 double 或 float 表示(即基数 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工作,因为 base-2 舍入将有读取“1.015”时已经发生(即计算机将看到 1.01499999...*1000 = 1014.999...)。当然,如果您从其他地方(例如用户输入或读取文件)获取值 1.015,这也适用。


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

关于rounding - Stata:舍入不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422691/

相关文章:

error-handling - 如何在Stata中有效使用knn

regression - 使用记录的因变量解释各组之间的边距(在 reghdfe 之后)

floating-point - 是否可以在不求助于任意精度数据类型的情况下消除浮点错误?

excel - Excel 中的四舍五入

r - 类似于 Stata 的 R 数据浏览器

Stata 分析不同商店的队列长度

wildcard - 来自变量名称的通配符匹配集

border - 带 CSS 的圆 Angular 梯形

c# - 四舍五入到最近的 5 C#

border - 带 CSS 的圆 Angular 梯形