首页 > 解决方案 > as.numeric(as.character(x)) 可以改变 x 吗?

问题描述

我想知道将数字转换为字符然后再返回 R 是否可以更改数字?例如, as.character 是否会在一定数量的小数位后四舍五入数字(如果是,有多少)?

标签: r

解决方案


@jogo 感谢您的建议 :)

这是作为答案的评论:

来自?as.character()

as.character 将实数和复数表示为 15 位有效数字(从技术上讲,编译器对 ISO C 常量 DBL_DIG 的设置,根据 C99 标准在支持 IEC60559 算法的机器上为 15)。这确保了结果中的所有数字都是可靠的(而不是表示错误的结果),但确实意味着转换为字符并返回数字可能会更改数字。如果您想以尽可能高的精度将数字转换为字符,请使用格式。

所以是的,如果您的有效数字超过 15 个,它确实会更改数字。看:

> as.character(1.000000000000001) # more than 15 significant digits
[1] "1"
> as.character(1.00000000000001) # less than 15 significant digits
[1] "1.00000000000001"

以下是一些其他示例:

y <- as.numeric(as.character(pi))
identical(y, pi) ### gives FALSE

或者

x <- 1/7
y <- as.numeric(as.character(x))
x-y

或者

as.numeric(as.character(.Machine$double.xmax)) ## result: Inf

推荐阅读