Stata:圆形不能正确舍入?

时间:2015-09-06 10:43:35

标签: rounding stata

我想在Stata中找一个数字:

display round(1.015, .01)

这产生1.01而不是预期的1.02

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

关于如何让Stata按照我的期望行事的任何建议?

1 个答案:

答案 0 :(得分:9)

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在其舍入模式(也称为打破平局)时似乎非常安静。虽然可能它使用捆绑,但它也可以是偶数或其他选项 - 最好不依赖于精确的中途行为,除非你能找到明确的规范