首页 > 解决方案 > R中的数字正确舍入

问题描述

关于这个问题有很多线程。似乎没有人回答这个简单的问题:为什么 R 不正确地四舍五入,我怎样才能让它正确地四舍五入?

正确舍入到第 i 个小数 x 考虑第 i+1 个小数。如果它是 5 或更大,则 x 设置为 x+1。如果它是 4 或更小,则返回 x。例如 1.45 四舍五入到小数点后为 1.5。1.44 四舍五入 1.4。然而,在R

> round(1.45,1)
[1] 1.4

> round(1.46,1)
[1] 1.5

因此它将约定更改为“如果第 i+1 位小数为 6 或更大,则 x 设置为 x+1”。为什么?我怎样才能将其更改为我熟悉的约定?

标签: rrounding

解决方案


大多数小数不能用二进制双精度精确表示

在这里学习:https ://stat.ethz.ch/R-manual/R-devel/library/base/html/Round.html

“警告”部分:

在二进制算术中四舍五入到十进制数字是不平凡的(当数字!= 0 时)并且可能令人惊讶。请注意,大多数十进制分数不能以二进制双精度精确表示。在 R 4.0.0 中,对于 d > 0 的 round(x, d) 算法进行了改进,以测量和舍入“到最接近的偶数”,这与 R 的早期版本(或 sprintf() 或 format( ) 基于舍入)。


推荐阅读