将字符转换为数字而不会丢失信息

时间:2014-12-11 20:52:47

标签: r character numeric

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

2 个答案:

答案 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