34

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

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

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

4

5 回答 5

19

第一条也是最重要的规则:使用十进制数据类型,永远不要使用二进制浮点类型。

何时应进行精确舍入可由法规强制执行,例如欧元与它所取代的本国货币之间的转换。

如果没有这样的规则,我会以高精度进行所有计算,并且只为演示而舍入,即不使用舍入值进行进一步计算。这应该会产生最佳的整体精度。

于 2010-10-01T15:58:56.380 回答
18

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

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

根据这个网站,“欧洲委员会报告《欧元的引入和货币金额的四舍五入》 表明,以前没有标准的方法来四舍五入银行业。”

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

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

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

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

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

于 2010-10-01T16:02:38.527 回答
6

令人沮丧的是,在这方面没有明确的标准,既可以指导程序员,也可以作为法庭上的辩护。仅仅对工资单进行“定期”四舍五入可能会导致工资单上少付几美分,这是劳工律师吃的东西。

虽然基本工资率很可能只指定小数点后两位(“您以 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 美元的费率。

现在工资单计算不和一分钱挂钩,现在你必须解释它,但即使这对员工有利,劳工律师也可以闻到水中的血腥味并开始寻找其他人东西。

一种方法是始终支持员工,而不是顺其自然,因此永远不会有系统性工资盗窃的指控。

于 2019-03-07T22:24:11.380 回答
3

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

于 2010-10-01T16:12:11.613 回答
0

考虑使用缩放整数。

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

于 2010-10-01T16:01:13.057 回答