Algorithm 处理货币密集型软测量中舍入误差的常用策略?

Algorithm 处理货币密集型软测量中舍入误差的常用策略?,algorithm,numbers,rounding,finance,Algorithm,Numbers,Rounding,Finance,您对以下方面有何建议: 补偿对货币对象集合进行批量数学运算时的累积错误。如何在您的区域设置的生产代码中实现这一点 会计理论落后于四舍五入 任何有关主题的文学作品 我目前正在阅读。他提到了货币类型,它是典型的结构(int,long,BigDecimal),但没有提到策略 关于金钱取整(、和)的老帖子没有提供我需要的细节和形式 我在inet中找到的想法与“两半齐平”有关,这是平衡误差的最佳方法 谢谢您的帮助。使用银行取整法。你可以找到最接近的两便士 您可以在此基础上展开,取而代之的是将四舍五入到最

您对以下方面有何建议:

  • 补偿对货币对象集合进行批量数学运算时的累积错误。如何在您的区域设置的生产代码中实现这一点
  • 会计理论落后于四舍五入
  • 任何有关主题的文学作品
  • 我目前正在阅读。他提到了货币类型,它是典型的结构(int,long,BigDecimal),但没有提到策略

    关于金钱取整(、和)的老帖子没有提供我需要的细节和形式

    我在inet中找到的想法与“两半齐平”有关,这是平衡误差的最佳方法


    谢谢您的帮助。

    使用银行取整法。你可以找到最接近的两便士


    您可以在此基础上展开,取而代之的是将
    四舍五入到最接近的两便士。22.5轮对22轮,但23.5轮对24轮。23.1和22.9两轮均为23。但是,原始的银行家算法更受欢迎。

    决不要将货币值存储为双精度或浮点数-使用
    int
    long
    ,因为无法将0.1精确存储为二进制。

    这一切都取决于应用程序。希望没有太多需要舍入的情况。例如,从一个帐户向另一个帐户转账不需要舍入

    对于需要四舍五入的情况,只要你选择一个策略,传达它,并坚持它,你做什么其实并不重要。例如,我相信我的储蓄账户上的利息会舍入到最接近的一便士。

    我对货币金额做过一些工作(只是一点),我对公司使用的策略非常好奇

    事实证明,我们使用了双精度编码,但他们已经考虑过了

    问题是,我们处理的数量并没有那么大(比如说少于10k),我们最多需要小数点后的3位数字,总共7位有效数字

    由于我们使用的是64位软件(和C++),
    double
    类型为我们执行的操作数量提供了足够的有效数字:)

    如果您需要更高的精度,可以使用一些算法(例如,在添加多笔资金时),但我个人认为问题的核心更多地来自:

    • 从一种货币到另一种货币的转换,当然会不断变化
    • 打印问题,有些钱不需要小数,有些最多需要2,等等

    也许您可以详细介绍您正在进行的操作?

    记录财务数据时存在许多舍入问题。 第一个问题是存储和检索精确的十进制数的能力

    • 大多数数据库都提供十进制数据类型,您可以在其上指定小数点前后的位数(货币的小数位数也各不相同,我处理过0、2、3位小数的货币)
    • 在处理这些数据时,为了避免应用程序端出现任何意外的舍入错误,可以将其用作通用方法,也可以使用整数来表示任何固定的十进制表示法,或者混合使用自己的十进制表示法
    如果第一个问题得到解决,那么任何添加(或删除)都不会引入任何舍入错误。整数乘法也是如此

    第二个问题是,在您能够在不丢失信息的情况下存储和检索数据之后,由于除法(或非整数乘法)可能会出现舍入错误

    例如,如果您的货币格式允许2位小数,并且您希望存储记录余额为10到3等分借方的交易,那么您只能像这样存储它

    10.00  
    -3.33  
    -3.33  
    -3.33  
    

    (舍入误差)

    这是无论数据类型存储选择如何都会发生的预期问题,如果您希望帐户保持平衡,则需要注意这一问题。这种情况主要是通过除法(或由具有许多有效数字的非整数相乘)引入的

    处理这一问题的一种方法是验证数据在此类操作后是否平衡,并识别允许的舍入差,而不是错误情况

    编辑:
    至于参考文献,似乎很有趣,也不太长,涉及到相当广泛的受众和有趣的场景。

    您应该做什么,很可能是由您所在的市场或司法管辖区的惯例决定的。例如,澳大利亚市场的债券定价要求将某些中间操作四舍五入到小数点后8位。最后的报价是以特定的小数位数(我脑子里想的是3)


    如果您使用的是会计应用程序,我希望您的法律环境中的相关会计标准可能会规定这一点。

    如果您询问的是会计,您应该询问实际的会计。他们有规则。在美国,一般公认会计准则涵盖了这一点。你问过会计吗?你找到适用于你所在地区的会计规则了吗?@S.Lott:嗨,我在立陶宛。今天我和当地的银行工作人员交谈:)。她告诉我,在月底或季度末,他们只是注销差异。但是这个答案不符合我的需要。那就找一个更好的会计师吧。认真地立陶宛的法律很可能涵盖这一点。如果不是法律规定的话,那么就按照一些专业标准(美国的GAAP就是这样)。这是会计师们的详细记录。@S.Lott:谢谢,S。我发现了一些关于这个问题的文章,正如你提到的,这似乎是当地标准的问题。我对鳍体所接受的不同技术感到惊讶。如果你也感兴趣的话,你可以使用“软件国际化”来浏览这个主题……通常那些int's&long's&BigDecimal's都是金钱的内部要素。有趣的是,当你对金钱进行大量操作时,如何克服累积的错误。@max:这是什么,会计溢出?;)什么
    -0.01