我想问一下,怎样的四舍五入更科学?

2020-07-07 17:27:12 +08:00
 ukipoi

-0.5 的四舍五入,是 0 更正确还是-1 更正确?

我试了下 excel 默认的 round,得到的是-1 。

那财务里面会注意这种四射五入吗?

3204 次点击
所在节点    程序员
24 条回复
Keyblade
2020-07-07 17:32:09 +08:00
“若原数值为负数,则先以绝对值求得结果后再加负号”
https://zh.wikipedia.org/wiki/%E6%95%B0%E5%80%BC%E4%BF%AE%E7%BA%A6
ukipoi
2020-07-07 17:34:49 +08:00
@Keyblade 那-0.5 四舍五入完-1,-0.5+1 四射五入完是 1,本来相差 1 的数后面相差了 2,这样得到的结果是否符合我们的期望呢?
Keyblade
2020-07-07 17:40:07 +08:00
@ukipoi #2 你要觉得四舍五入不行还有五舍六入、五舍六入五留
看你需求来呗
Keyblade
2020-07-07 17:40:29 +08:00
@Keyblade #3 错一个字,是四舍六入五留
Shawn211
2020-07-07 17:59:37 +08:00
@ukipoi 我个人觉得算符合呢哈哈,因为我觉得重点还在看“保留到第几位”

就好比说四舍五入保留到百位,那么 49 和-49 都变成 0,可是原本相差 98 呢

所以说,四舍五入符不符合期望,不单单就只是看“四舍五入”这个方法,还要看你保留到第几位

比如你说的-0.5 和 0.5,四舍五入保留到十分位,甚至百分位、千分位,都是很符合期望的

从这看来,四舍五入中的保留到第几位,会影响到误差的大小(也就出现 2 楼的情况啦)

对于“财务里面会注意这种四射五入吗?”,我个人猜测在最后得到结果时,保留到分单位就可以啦(如果结果还要进行下一步的处理,就不四舍五入)
qiayue
2020-07-07 18:06:01 +08:00
四舍五入可以理解为在数轴上的任意一点,给归类到最近的整数点上去
0.5 刚好是 1 的一半,与 0 和 1 的距离相同,这个时候我们定义了规则,五入,所以 0.5 右侧的点都归类到 1 上了。
类似的,对称处理,-0.5 也会被归类到-1 上。
又因为都是近似处理,造成了误差,两个 0.5 的误差是 1,再加上本身的距离 1,所以差是 2
Vegetable
2020-07-07 18:18:39 +08:00
貌似负数四舍五入的标准和去掉负号的正数是一样的。
round(0.5) == 0
rount(1.5) == 2
这是银行家舍入法,但是 Excel 用的不是银行家舍入,就是普通四舍五入,一样也是和去掉负号的正数逻辑。
Vegetable
2020-07-07 18:25:21 +08:00
Excel 的说明

When rounding a negative number, that number is first converted to its absolute value (its value without the negative sign). The rounding operation then occurs, and then the negative sign is reapplied. Although this may seem to defy logic, it is the way rounding works. For example, using the ROUNDDOWN function to round -889 to two significant digits results in -880. First, -889 is converted to its absolute value of 889. Next, it is rounded down to two significant digits results (880). Finally, the negative sign is reapplied, for a result of -880.

https://support.microsoft.com/en-us/office/round-a-number-f82b440b-689d-4221-b21e-38da99d33435
jiejiss
2020-07-07 19:07:36 +08:00
四舍六入五成双? Python 的 round 就是
wangritian
2020-07-07 19:18:57 +08:00
0.0~0.9 的 10 个小数,其中 0.0~0.4 计算为 0,0.5~0.9 计算为 1,乍一看 55 开很公平,但 0.0 本身就等于 0,只有剩余 9 个数字真正参与四舍五入了,其中 4 个数字变小,5 个数字变大,所以大量数字的四舍五入结果会偏大一点,所以财务有当小数部分=5 时,整数为偶则舍,整数为奇则进的规则
Windelight
2020-07-07 19:23:25 +08:00
三七作五,二进八退
Windelight
2020-07-07 19:24:16 +08:00
@Windelight Fix 一下,二退八进
zjsxwc
2020-07-07 20:00:43 +08:00
把小数点多加几位精度不就好了,财务上四舍五入完全是自寻烦恼
crclz
2020-07-07 20:04:09 +08:00
round2even
volvo007
2020-07-07 21:30:23 +08:00
四舍六入,五分这几种情况
1. 5 后面还有多余小数的,进位
2. 刚好是 5,前面为偶数,不进位
3. 刚好是 5,前面为奇数,进位

至于为什么要这么设计,参见 10 楼

财务上,请用 decimal 函数,基本现在高级一点的语言都有这个类,excel 也有这个函数
sarvatathagata
2020-07-07 21:58:07 +08:00
真奇怪,C++和 Python 里 round(-0.5)是-1,Pascal 和 Javascript 里 round(-0.5)是 0,这么不统一的吗
kaiki
2020-07-07 22:05:29 +08:00
@ukipoi 为什么不先算差再四舍五入?
hoyixi
2020-07-07 22:17:44 +08:00
数学上没有好坏之分,舍还是入,数学上和工具上,都是随便你,你自己做主。

所以,具体得看你的业务场景。
nuistzhou
2020-07-07 22:27:50 +08:00
只记得大学物理老师说:四舍六入五凑偶
mitu9527
2020-07-07 23:14:47 +08:00
没有哪种更正确,有好几种舍入模式,具体用哪种模式还是取决于需求。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/687972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX