关于R语言round函数舍入规则不一致的技术问询
解惑R语言
round()函数的X.5舍入行为 这其实是R语言里round()函数默认采用的**银行家舍入法(四舍六入五成双)**导致的,我来给你掰扯清楚:
核心规则
当数值的小数部分恰好是0.5时,会舍入到最近的偶数,而不是固定向上或向下舍入:
round(0.5)→ 0(0是最近的偶数)round(1.5)→ 2(2是比1更近的偶数)round(2.5)→ 2(2本身就是偶数,是最近的)round(3.5)→ 4(4是最近的偶数)round(4.5)→ 4(4是最近的偶数)round(5.5)→ 6(6是最近的偶数)round(6.5)→ 6(6是最近的偶数)
为什么用这种舍入方式?
传统的四舍五入(逢5进1)会导致长期统计时结果偏向偏大,因为所有X.5都向上舍入。而银行家舍入法通过舍入到最近偶数,能让向上和向下舍入的次数在大量数据中大致平衡,减少累计误差,这种规则在金融、统计等对精度要求高的场景更公平合理。
如果你需要强制传统的四舍五入,可以自己实现一个简单函数,比如:
round_traditional <- function(x) { sign(x) * floor(abs(x) + 0.5) }
测试一下:round_traditional(c(1.5,2.5))会得到2 3,符合传统认知。
内容的提问来源于stack exchange,提问作者ML Lover




