通过写入.csv和数据库中的R意外舍入

时间:2013-08-21 13:29:15

标签: r

我遇到以下问题。我有大约10-20位小数的数值。我在.csv(通过write.csv2())和数据库(通过RODBC包中的SQLSave())中编写这些值。所有小数都与我有关。 不幸的是,R在小数点后8位舍入数字。

举个例子:

  

5655698.697843645699322

变为:

  

5655698,69784365

我尝试增加$digits中的位数(options()),但这只影响我在控制台中看到的位数。 我尝试使用format(,digits=x)这是有效的。然而,由于我有大量的列,这是非常昂贵的,它看起来不是一个干净的解决方案。

是否有另一种方法可以通过写入.csv和数据库来增加位数?

2 个答案:

答案 0 :(得分:0)

你能尝试一下吗(但这只适用于txt文件而不适用于csv文件)?

 x<-5655698.697843645699322
 y<-sprintf("%.15f",x)
[1] "5655698.697843645699322"

 write(y,"x.txt")

更新:

y<-format(round(x, 15), nsmall = 15)
write(y,"x.txt")

 y<-format(round(x, 25), nsmall = 25)
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  : 
  invalid 'nsmall' argument

错误意味着您不能将小数增加15以上(根据参数nsmall

 y<-format(round(x, 25), nsmall = 15)
> y
[1] "5655698.697843645699322"

答案 1 :(得分:0)

R使用64位IEEE双精度作为基本数字格式。这精度限制为14-15 有效数字(不是小数位)。所以R只是将数字写到正确的精确极限。

如果需要更多小数,可以使用包进行任意精度算术:

http://cran.r-project.org/web/packages/Rmpfr/index.html

http://cran.r-project.org/web/packages/gmp/index.html