舍入标准 - 财务计算

问题描述 投票:29回答:5

我很好奇在财务数据的计算方面存在任何“舍入”标准。我最初的想法是仅在数据呈现给用户(表示层)时执行舍入。

如果“舍入”数据然后用于进一步计算,应该使用“圆形”数字还是“原始”数字?有人有建议吗?

请注意,我知道不同的舍入方法,即银行家舍入等。

rounding financial rounding-error bankers-rounding
5个回答
15
投票

第一个也是最重要的规则:使用decimal data type,永远不要使用二进制浮点类型。

当应该执行完全舍入时可以通过法规强制执行,例如Euro and national currencies之间的转换它被替换。

如果没有这样的规则,我将以高精度进行所有计算,并且仅用于呈现,即不使用舍入值进行进一步计算。这应该产生最佳的整体精度。


14
投票

我刚刚在我工作的财务软件公司问了一个greybeard大型机程序员,他说没有众所周知的标准,这取决于程序员的实践。

虽然统计学家至少从1906年就已经意识到四舍五入问题,但很难找到支持它的财务标准。

根据this site的说法,“欧盟委员会报告The Introduction of the Euro and the Rounding of Currency Amounts表示,以前没有标准的方法来进行银行业务的四舍五入。”

通常,无论您使用何种基础(base-2或base-10),都使用对称舍入模式。

这将避免计算过程中的系统偏差。

这种模式是Round-Half-Even-Even,也称为“银行家舍入”。

使用允许您指定数字上下文明确性的语言工具,包括舍入和截断模式。例如,Python的decimal模块。 C库所做的隐式假设可能不适合您的计算。

http://en.wikipedia.org/wiki/Rounding#Rounding_to_integer


3
投票

我没有看到“统治它们的一个标准”的存在 - 有任何数量的舍入规则(正如你所引用的),它们似乎基于行业/客户/和货币代码(http://en.wikipedia.org/wiki/ISO_4217)发挥作用 - 因为不是每个人都在小数点后使用2个位置,问题变得更加复杂。在一天结束时,您的客户需要指定他们想要实施的规则......


1
投票

令人沮丧的是,没有明确的标准,既可以指导程序员,也可以作为法庭辩护。只是向工资单最近进行“定期”四舍五入可能会导致支付不到几美分的薪水,这是劳动律师吃得像裂缝一样。

虽然基本工资率可能只能在小数点后两位指定(“你以每小时22.71美元的价格聘用”),但混合加班(通过在一段时间内平均多个工资率确定)之类的结果最终会产生有效的小时工资率。 $ 23.37183475 /小时。

你如何支付加班费?

15 hours x 23.37183475 x 1.5 = $525.87 rounded from $525.86628187
15 hours x 23.37       x 1.5 = $525.82

你为什么要从我的客户那里偷走五个人?可悲的是,我不是在开玩笑。

当您以全精度值计算但显示截断版本时,这会变得更加不舒服:您执行上面的第一次计算,但仅显示付款存根上的费率$ 23.37。

现在薪资存根的计算并没有与一分钱相关联,现在你必须解释它,但即使这对员工有利,也可以让劳动律师闻到水中的鲜血并开始寻找其他东西。

一种方法是始终围绕员工,而不是自然的方向,因此不可能有系统的工资盗窃指控。


0
投票

考虑使用缩放整数。

换句话说,存储整数便士而不是分数美元。

© www.soinside.com 2019 - 2024. All rights reserved.