R(和python)从5或6开始四舍五入

R(和python)从5或6开始四舍五入,r,python-3.x,math,R,Python 3.x,Math,我已经看到了一个小数位数非常大的问题 给我62.49分。我预计已经是62.5了,但似乎R(3.4.3,3.5.0)只从6开始四舍五入,例如 round(62.485, 2) == 62.48 round(62.486, 2) == 62.49. 出于其他原因,我正在使用该选项 options(digits.secs=6) 据我所知,从5开始四舍五入。我还使用Python和Matlab进行了测试。Matlab向上取整,Python 3.5.4向下取整 我如何改变行为,或者该定义是否不同,例如,

我已经看到了一个小数位数非常大的问题

给我62.49分。我预计已经是62.5了,但似乎R(3.4.3,3.5.0)只从6开始四舍五入,例如

round(62.485, 2) == 62.48
round(62.486, 2) == 62.49.
出于其他原因,我正在使用该选项

options(digits.secs=6)
据我所知,从5开始四舍五入。我还使用Python和Matlab进行了测试。Matlab向上取整,Python 3.5.4向下取整


我如何改变行为,或者该定义是否不同,例如,在欧洲和美国之间?

这是一个浮点表示问题,62.495实际上由一个稍小的数字表示,然后向下四舍五入

print(62.495,digits=22)
[1] 62.49499999999999744205
R的四舍五入是统计四舍五入,或四舍五入到偶数。它应该将两半向上或向下取整为偶数

round(0.5) # rounds the half down to 0
[1] 0
round(1.5) # rounds the half up to 2
[1] 2

这是一个浮点表示问题,62.495实际上由一个稍小的数字表示,然后向下四舍五入

print(62.495,digits=22)
[1] 62.49499999999999744205
R的四舍五入是统计四舍五入,或四舍五入到偶数。它应该将两半向上或向下取整为偶数

round(0.5) # rounds the half down to 0
[1] 0
round(1.5) # rounds the half up to 2
[1] 2

R3.5.0
中,它对我有效:
round(62.495,1)
注意
round(5.5)
返回
6
但是
round(5.55,1)
返回
5.5
sprintf(%.16f',62.495)PS我想你是想写
round(62.485,2)==62.48
我想你可能误解了计算机系统是如何执行舍入的。计算机系统,如R,使用IEEE标准进行舍入(我相信是IEEE 60559),该标准规定,当一个值以精确的5结尾时,它将舍入到下一位最接近的偶数位。然而,这个精确的术语很重要,原因如詹姆斯的回答中所述。在
R3.5.0
中,它对我有效:
round(62.495,1)
注意
round(5.5)
返回
6
但是
round(5.55,1)
返回
5.5
sprintf(%.16f),62.495)
PS我想你是想写
round的(62.485,2)==62.48
我想您可能误解了计算机系统如何执行舍入。计算机系统,如R,使用IEEE标准进行舍入(我相信是IEEE 60559),表示当一个值以精确的5结尾时,它将四舍五入到下一位最接近的偶数位。然而,这个精确的术语很重要,原因如James的答案所示。