为什么as.integer()返回的值不正确?

时间:2019-01-03 04:46:44

标签: r

我在我的R脚本中使用以下表达式,并获得不正确的值。我想知道这是一个错误还是做错了什么。任何帮助将不胜感激。

  

as.integer(10.7275 * 1e7)

它返回107274999。我期望它返回107275000。如何解决该问题?

2 个答案:

答案 0 :(得分:3)

这是由于计算机不准确,带有小数点(如@Suren的评论中所述)。您可以通过以下方法解决它:

as.integer(ceiling(10.7275*1e7))

注意:

ceiling(as.integer(10.7275*1e7)) 

不起作用(它将返回您现在获得的值)。

答案 1 :(得分:-1)

这是一个浮点问题。一种快速的解决方法是使用双精度浮点以提高精度:

as.double(10.7275*1e7)                       # alternatively as.numeric()

# [1] 107275000

也请参考此floating point post,以获取@Wai Ha Lee评论的浮点数学的更多信息和分辨率