我想将以下字符数据转换为数字数据。但是as.numeric正在修剪一些信息。转换为数字后如何确保获得1.00000000000000000000000000000001?

> a="1.00000000000000000000000000000001"
> as.numeric(a)
[1] 1
> as.numeric(a,10)
[1] 1
> as.numeric(as.character(a))
[1] 1
> as.double(a)
[1] 1

最佳答案

如果您需要精确度,请考虑使用Rmpfr软件包

library(Rmpfr)
longa<-mpfr("1.00000000000000000000000000000001",200)
longa
1 'mpfr' number of precision  200   bits
[1] 1.0000000000000000000000000000000100000000000000000000000000004

请注意,即使在这里也有一些4x10-[bignumber]错误。

尝试一些更奇特的东西:
mpfr("1.00000000000000000000000000000001e50",200)
1 'mpfr' number of precision  200   bits
[1] 100000000000000000000000000000001000000000000000000 #is an integer, so no error
mpfr("1.00000000000000000000000000000001e50",200)/1e50
1 'mpfr' number of precision  200   bits
[1] 0.99999999999999992370230158908114578838913309406505827306768701

我要指出的是,在计算机上使用浮点数时,您需要非常小心。

关于r - 将字符转换为数字而不丢失信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27432152/

10-11 04:22