从字符不精确中转换数字

时间:2013-11-01 07:55:52

标签: r

as.numeric(as.character(1363821605424526000))会产生1363821605424526080

为什么以及如何防止这种情况?

1 个答案:

答案 0 :(得分:3)

一种解决方案是使用gmp库( GNU Multiple Precision 库)来创建并使用大整数进行基本算术...

require(gmp)
as.bigz("1363821605424526000")
#Big Integer ('bigz') :
#[1] 1363821605424526000

请注意使用"围绕该号码。这是为了防止它被R解析为numeric数据类型,当然这不能在给定的数据结构中准确地表示这个数字。在"将其变为as.bigz类型之前,big integer会将其视为字符变量。

实施例

as.bigz("1363821605424526000") + 1
#Big Integer ('bigz') :
#[1] 1363821605424526001

as.bigz("1363821605424526000")^3
#Big Integer ('bigz') :
#[1] 2536720967038413127881466345733319337545403576000000000