此操作应该返回2,但1由于浮点表示,它会返回:
a <- .3
b <- .1
floor((a-b)*10)
我基本上想要点后的第一个数字,实际以 10 为底的结果,而不是浮点计算机的结果。在这种情况下a,b只有一位十进制数字,但在大多数情况下会有更多。例子:
0.3-0.1=0.2所以我想要20.5-0.001=0.499所以我想要40.925-0.113=0.812所以我想要80.57-0.11=0.46所以我想要40.12-0.11=0.01所以我想要0
也就是说,不是舍入而是截断。我想用这个:
floor(floor((a-b)*100)/10)
但我不确定这是否是我能做的最好的。
更新:确实,它不起作用(见下面的评论):
floor(floor((.9-.8)*100)/10) # gives 0 instead of 1
floor(round((.5-.001)*100)/10) # gives 5 instead of 1
更新2:认为这确实有效(至少在迄今为止列出的所有情况下):
substring(as.character(a-b),first=3,last=3)
建议?