3

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

举个例子:

5655698.697843645699322

变成:

5655698,69784365

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

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

4

2 回答 2

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"
于 2013-08-21T13:35:22.633 回答
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

于 2013-08-21T16:47:53.867 回答