在 R 中,为什么 %% 对十进制数的行为不同?

问题描述

在 R 中,我想检查一个数字是否是另一个数字的倍数。这适用于整数

> 124%%1
[1] 0
> 124%%2
[1] 0

但由于某些神秘原因不能很好地处理十进制数,知道为什么 1.05%%0.05not 0 吗?

> 0.05%%0.05
[1] 0
> 1.05%%0.05
[1] 0.05

解决方法

根据?"%%"

%% 和 x %/% y 可用于非整数 y,例如1 %/% 0.2,但结果受制于表示错误,因此可能与平台有关。因为 IEC 60559 表示 0.2 是一个略大于 0.2 的二进制分数,所以 1 %/% 0.2 的答案应该是 4,但大多数平台给出的是 5。

,

如果您期望结果为 0,那么您可能会对将两个参数乘以 100(使这些整数或至少接近它们。)的结果感到满意。

(100*1.05)%%(100*0.05)
[1] 0

请参阅@akrun 对“为什么”的回答。