【发布时间】:2011-07-05 06:56:57
【问题描述】:
使用瑞士法郎算法对货币金额进行四舍五入时,会考虑小数点后的第二位和第三位。如果小于 26,则向下舍入为 0;否则,如果小于 76,则向下舍入到 5;否则整个值会向上取整。
20.125 => 20.10
20.143 => 20.15
20.179 => 20.20
当要四舍五入的金额具有更高的小数精度时会发生什么?第三个之后的所有十进制数字是否都被忽略(值被截断),或者该值首先以其他方式四舍五入到三个十进制数字?例如,考虑截断与“Math.round()”方法(小于 0.5 舍入,否则向上舍入):
Truncation | "Math.round"
=================================================================
Start 3 d.p. Rounded | Start 3 d.p. Rounded
=================================================================
20.1259 -> 20.125 => 20.10 | 20.1259 -> 20.126 => 20.15
20.1759 -> 20.175 => 20.15 | 20.1759 -> 20.176 => 20.20
如上所示,这些边缘情况在最终结果中差异很大。
阿根廷货币四舍五入遵循类似的模型,仅关注小数点后三位。虽然四舍五入的结果可能有两位或三位小数,但同样的原则适用;如果要四舍五入的值有四位或更多小数位,算法应该只截断第三位数字之后的任何内容,还是应该应用其他类型的中间四舍五入来首先获得小数点后三位的结果?
谢谢!
【问题讨论】:
标签: rounding currency precision