任何人都可以解释下面转载的奇怪的十进制行为吗?以及如何避免它?我想使用四舍五入,但我看不出我应该需要什么。
x <- 200.10
y <- 200.96
paste("Difference", x - y, sep = ":")
# [1] "Difference:-0.860000000000014"
# But not here!
200.10-200.96
# -0.86
答案 0 :(得分:1)
没有什么奇怪的事情发生。两种情况下的精度都是相同的,只是印刷方式不同。
sprintf("Difference: %.2f", x - y)
# prints -0.86 as in your last output
options(digits=15); 200.10-200.96
# prints -0.860000000000014 as in your first output
两种情况下的精度都由类型决定(在这种情况下为double
)。见https://stat.ethz.ch/R-manual/R-devel/library/base/html/double.html
和https://stat.ethz.ch/R-manual/R-devel/library/base/html/zMachine.html
答案 1 :(得分:0)
由于用于精度的位数,处理浮点值时会发生这种情况。您可以通过确保您的值具有特定的小数位数来避免此问题,或者您可以使用整数。