【问题标题】:Swiss and Argentinian currency fourth decimal digit rounding瑞士和阿根廷货币第四位小数四舍五入
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,但为了简洁起见,我已经解释了描述。有许多变体,包括“0 向下舍入,25 舍入为 0.5,75 向上舍入”。这就是导致我所描述的模棱两可的原因。维基百科增加了混乱:en.wikipedia.org/wiki/Swedish_rounding - 我最初的实现基于以下内容,尽管我认为它的描述现在不正确:xencraft.com/resources/multi-currency.html
    • 但可以肯定的是,无论如何,您仍然使用实际值来进行确定,而不是已经被其他方法四舍五入的值。你只想圆一次。我错过了什么吗?
    • 可能不会,但这不是你想弄错的。令人不安的是,我在网上找不到明确的参考资料或在这里得到明确的答案,所以这显然不是一个容易回答的问题。截断似乎是最合理的答案,但也是一个相当随意的答案;再一次,整个算法似乎很随意,所以也许我只是允许一些模糊的常识概念进入等式,而且似乎常识在金融中没有地位:-D
    • 过去 13 年我一直从事财务软件工作,我确实可以确认没有太多常识 ;-)
    • 嗯,0.0259999... 仅小于 0.026,如果您有有限数量的 9。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2020-06-24
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多