我想将以下字符数据转换为数字数据。但是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/