我想在Stata中找一个数字:
display round(1.015, .01)
Run Code Online (Sandbox Code Playgroud)
这产生1.01而不是预期的1.02
至少这是我所期望的(理解我的期望可能不符合Stata正在使用的某些标准).
关于如何让Stata按照我的期望行事的任何建议?
Stata使用数字的双重或浮点表示(即基数2不是基数10).不幸的是,1.015在基数2中无法表示,因此它会达到最接近的值,在这种情况下略小于1.015,因此该回合下降.在处理计算机上的浮点精度时这是一个常见问题 - 例如,参见Ruby中的这个问题:Ruby Float #round方法在圆形(2)中表现不正确
那么你如何解决它?
如果3个小数位的精度对您很重要,则需要使用定点精度.我不相信Stata原生支持这个,但是很容易自己做:
display round(1015, 10)*0.001
Run Code Online (Sandbox Code Playgroud)
即你的输入数字乘以10 ^ 3,你显示的数字乘以10 ^ -3.因此,所有处理都以您感兴趣的小数位数的整数精度执行.
但是请注意,这看似相当于display round(1.015*1000, 0.01*1000)*0.001将无法工作,因为基数2四舍五入将已经阅读时,"1.015"(即电脑会看到1.01499999 ......*1000 = 1014.999 ...)发生.当然,如果您从其他地方获取值1.015(例如用户输入或读取文件),这也适用.
顺便说一句,Stata在其舍入模式(也称为打破平局)时似乎非常安静.虽然它可能会使用捆绑,但它也可能是偶数或其他选项 - 最好不要依赖精确的中途行为,除非你能找到明确的规范.
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |