R version 3.2.0 (2015-04-16)
,OS Ubuntu 14.04
最近我遇到了一个非常奇怪的问题,这真的很烦人。
代码:
q[94]
# [1] -0.7
paste0(q[94],".dat")
# [1] "-0.699999999999999.dat"
paste0(-0.7,".dat")
# [1] "-0.7.dat"
paste0
功能只是将-0.7
更改为-0.699999999999999
。
这个问题不仅发生在q[94]
,也发生在另一个问题上
变量q
中的元素(并非所有元素)。但我无法弄清楚这方面的任何模式
问题。在这种情况下,小数位数的变化在不同的路径上不是随机的。 -0.7
将始终更改为-0.699999999999999
。我怀疑问题与options("digits"=)
有关,但我试图在没有任何帮助的情况下更改此选项。另一件事是这个问题也发生在我使用Cent Os 4.5
R version 3.1.3 (2015-03-09)
的服务器上。
更新:我尝试了paste0(as.character(q[94]),".dat")
,但这不起作用。即使我使用as.character(q)
将整个矢量转换为字符向量,也会发生这个问题。
编辑以澄清:此问题Why are these numbers not equal?中的答案对浮点数给出了很好的解释。我想在这里做的只是将数字转换为
我看到的字符串没有任何意外结果。因此,如果
我使用paste0()
函数应该做什么?
更新:最佳解决方案是使用sprintf()
函数来控制浮点数的数字