-0.5 的四舍五入,是 0 更正确还是-1 更正确?
我试了下 excel 默认的 round,得到的是-1 。
那财务里面会注意这种四射五入吗?
1
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 |
2
ukipoi OP @Keyblade 那-0.5 四舍五入完-1,-0.5+1 四射五入完是 1,本来相差 1 的数后面相差了 2,这样得到的结果是否符合我们的期望呢?
|
5
Shawn211 2020-07-07 17:59:37 +08:00
@ukipoi 我个人觉得算符合呢哈哈,因为我觉得重点还在看“保留到第几位”
就好比说四舍五入保留到百位,那么 49 和-49 都变成 0,可是原本相差 98 呢 所以说,四舍五入符不符合期望,不单单就只是看“四舍五入”这个方法,还要看你保留到第几位 比如你说的-0.5 和 0.5,四舍五入保留到十分位,甚至百分位、千分位,都是很符合期望的 从这看来,四舍五入中的保留到第几位,会影响到误差的大小(也就出现 2 楼的情况啦) 对于“财务里面会注意这种四射五入吗?”,我个人猜测在最后得到结果时,保留到分单位就可以啦(如果结果还要进行下一步的处理,就不四舍五入) |
6
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 |
7
Vegetable 2020-07-07 18:18:39 +08:00
貌似负数四舍五入的标准和去掉负号的正数是一样的。
round(0.5) == 0 rount(1.5) == 2 这是银行家舍入法,但是 Excel 用的不是银行家舍入,就是普通四舍五入,一样也是和去掉负号的正数逻辑。 |
8
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 |
9
jiejiss 2020-07-07 19:07:36 +08:00
四舍六入五成双? Python 的 round 就是
|
10
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 时,整数为偶则舍,整数为奇则进的规则
|
11
Windelight 2020-07-07 19:23:25 +08:00 via Android
三七作五,二进八退
|
12
Windelight 2020-07-07 19:24:16 +08:00 via Android
@Windelight Fix 一下,二退八进
|
13
zjsxwc 2020-07-07 20:00:43 +08:00 via Android
把小数点多加几位精度不就好了,财务上四舍五入完全是自寻烦恼
|
14
crclz 2020-07-07 20:04:09 +08:00
round2even
|
15
volvo007 2020-07-07 21:30:23 +08:00
四舍六入,五分这几种情况
1. 5 后面还有多余小数的,进位 2. 刚好是 5,前面为偶数,不进位 3. 刚好是 5,前面为奇数,进位 至于为什么要这么设计,参见 10 楼 财务上,请用 decimal 函数,基本现在高级一点的语言都有这个类,excel 也有这个函数 |
16
sarvatathagata 2020-07-07 21:58:07 +08:00
真奇怪,C++和 Python 里 round(-0.5)是-1,Pascal 和 Javascript 里 round(-0.5)是 0,这么不统一的吗
|
18
hoyixi 2020-07-07 22:17:44 +08:00
数学上没有好坏之分,舍还是入,数学上和工具上,都是随便你,你自己做主。
所以,具体得看你的业务场景。 |
19
nuistzhou 2020-07-07 22:27:50 +08:00 via iPhone
只记得大学物理老师说:四舍六入五凑偶
|
20
mitu9527 2020-07-07 23:14:47 +08:00
没有哪种更正确,有好几种舍入模式,具体用哪种模式还是取决于需求。
|
21
shc 2020-07-07 23:19:57 +08:00
科学计算是约成 0 的,四舍六入五平分。
|
22
Phariel 2020-07-07 23:25:58 +08:00 via iPhone
应该让小数位数尽可能的长 长到不影响你的业务逻辑数据的精度 在这个基础上去做 rounding
|
23
MineDog 2020-07-07 23:44:13 +08:00 via Android
应该和取整类似,看具体向上还是向下取整吧
|
24
Iamnotfish 2020-07-08 05:39:35 +08:00
1,尽量避免做除法,无法避免的尽量将除法放在最后去做。
2,结果保留 6 位小数。 |