我想将下面的字符数据转换为数字数据。但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
答案 0 :(得分:3)
如果您需要提高精度,请考虑包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
我指出的是,在计算机上使用浮点数时需要非常小心。
答案 1 :(得分:2)
这不是as.character
的问题,而是数值精度的限制:
> a <- 1.00000000000000000000000000000001
> a == 1
[1] TRUE