瑞士和阿根廷货币第四个十进制数字四舍五入

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)

如上所示,这些边缘情况在最终结果中变化很大.

阿根廷货币四舍五入遵循类似的模型,只关注第三个十进制数字.虽然舍入结果可能有两位或三位小数,但同样的原则适用; 如果要舍入的值有四个或更多的十进制数字,算法是否应该截断第三个数字之后的任何内容,还是应该应用其他类型的中间舍入来获得第一个三位小数的结果?

谢谢!

les*_*ode 4

如果小于 26,则向下舍入为 0;否则,如果小于 76,则向下舍入为 5;否则整个值将向上舍入。

由此我认为“截断”方法是合适的,因为 0.0259XXXXX 小于 0.026

  • 过去 13 年里我一直从事金融软件工作,我确实可以确认周围没有太多常识;-) (7认同)
  • 但可以肯定的是,无论如何您仍然使用实际值来做出确定,而不是已经通过其他方法四舍五入的值。你只想绕一次。我错过了什么吗? (3认同)
  • 可能不会,但这不是您想要出错的事情。令人不安的是,我在网上找不到明确的参考资料或在这里得到明确的答案,所以这显然不是一个容易回答的问题。截断似乎是最合理的答案,但也是一个相当武断的答案。然后整个算法看起来相当任意,所以也许我只是允许一些模糊的常识概念进入方程式,而且看来常识在金融中没有地位:-D (2认同)