此操作应该返回2
,但1
由于浮点表示,它会返回:
a <- .3
b <- .1
floor((a-b)*10)
我基本上想要点后的第一个数字,实际以 10 为底的结果,而不是浮点计算机的结果。在这种情况下a
,b
只有一位十进制数字,但在大多数情况下会有更多。例子:
0.3-0.1=0.2
所以我想要2
0.5-0.001=0.499
所以我想要4
0.925-0.113=0.812
所以我想要8
0.57-0.11=0.46
所以我想要4
0.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)
建议?