1
我需要提取十进制数。我发现this答案使用%%
。r:为什么%%提取十进制数不产生逻辑值?
方式很简单:
0.1%%1
[1] 0.1
如果我试着10.1:
10.1%%1
[1] 0.1
但是,当我评价平等不起作用
0.1%%1==10.1%%1
[1] FALSE
为什么这是错误的?非常感谢
我需要提取十进制数。我发现this答案使用%%
。r:为什么%%提取十进制数不产生逻辑值?
方式很简单:
0.1%%1
[1] 0.1
如果我试着10.1:
10.1%%1
[1] 0.1
但是,当我评价平等不起作用
0.1%%1==10.1%%1
[1] FALSE
为什么这是错误的?非常感谢
这是由于二进制浮点不能很好地转换为十进制表示的事实。假设64位IEEE754浮点:
最接近浮点数〜0.1是0.1000000000000000055511151231257827021181583404541015625
最接近浮点数至10.1是 10.0999999999999996447286321199499070644378662109375
可以看到,小数部分基本上是不同的,所以确切的比较必然会失败。
在这里很难提出补救措施,因为这很大程度上取决于您的特定使用情况。 (Instinct向我暗示,你可以比较1e-13的附加容差)。
作为此附件,您可以舍入到小数点后1位以避免此不等式'0.1 %% 1 == round(10.1 %% 1,1)'为TRUE。 –
'all.equal'也将显示这些值相等。 –