R中的四舍五入返回错误值

R中的四舍五入返回错误值,r,rounding,R,Rounding,使用修改的舍入函数考虑以下代码: round2 = function(x, n) { posneg = sign(x) z = abs(x)*10^n z = z + 0.5 z = trunc(z) z = z/10^n z*posneg } n<-387.9 d<-400 round2(n/d,4) round2=函数(x,n){ posneg=符号(x) z=abs(x)*10^n z=z+0.5 z=trunc(z) z=z/10^n z*posn

使用修改的舍入函数考虑以下代码:

round2 = function(x, n) {
  posneg = sign(x)
  z = abs(x)*10^n
  z = z + 0.5
  z = trunc(z)
  z = z/10^n
  z*posneg
}

n<-387.9
d<-400
round2(n/d,4)
round2=函数(x,n){
posneg=符号(x)
z=abs(x)*10^n
z=z+0.5
z=trunc(z)
z=z/10^n
z*posneg
}

默认值有什么问题…FWIW,这只是一个标准的浮点算术问题<代码>trunc
没有做任何“错误”的事情。如果您单步执行函数并设置
选项(数字=19)
,然后边走边看数字,您会发现数字不能用浮点精确表示。我同意@joran的所有说法,但另一方面,这是一个反复出现的问题,我不认为R在浮点运算方面表现得特别好。在Linux中,我可以使用
bc-l
,而不会遇到这样的问题。在未来的版本中可能有改进的余地。这与以下内容有关:
四舍五入
声明“注意,对于五舍五入,预计使用IEC 60559标准‘到偶数位’。因此
四舍五入(0.5)
0
四舍五入(-1.5)
-2
”。这里有一个练习:将函数建立在
的基础上: