And*_*son 8 precision currency rounding
使用瑞士法郎算法舍入货币金额时,将考虑第二个和第三个十进制数字.如果小于26,则将它们向下舍入为0; 否则如果小于76,则向下舍入到5; 否则整个价值被四舍五入.
20.125 => 20.10
20.143 => 20.15
20.179 => 20.20
Run Code Online (Sandbox Code Playgroud)
当舍入的量具有更大的小数精度时会发生什么?是否只是忽略了第三个之后的所有十进制数字(值被截断),或者首先以某种其他方式将值舍入为三位小数?例如,考虑截断与"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
Run Code Online (Sandbox Code Playgroud)
如上所示,这些边缘情况在最终结果中变化很大.
阿根廷货币四舍五入遵循类似的模型,只关注第三个十进制数字.虽然舍入结果可能有两位或三位小数,但同样的原则适用; 如果要舍入的值有四个或更多的十进制数字,算法是否应该截断第三个数字之后的任何内容,还是应该应用其他类型的中间舍入来获得第一个三位小数的结果?
谢谢!
如果小于 26,则向下舍入为 0;否则,如果小于 76,则向下舍入为 5;否则整个值将向上舍入。
由此我认为“截断”方法是合适的,因为 0.0259XXXXX 小于 0.026