7

我想看看人们是否在金融应用程序中使用十进制而不是双精度。我见过很多人到处使用 double 并产生意想不到的后果。.

您是否看到其他人犯了这个错误。. .

4

7 回答 7

8

不幸的是,我们做到了,我们为此感到遗憾。我们必须将所有双精度数更改为小数。小数适用于金融应用。您可以查看这篇文章 A Money type for the CLR

一种方便、高性能的 CLR 货币结构,它可以处理算术运算、货币类型、格式以及仔细分配和舍入而不会丢失。

于 2008-10-24T04:01:27.210 回答
5

是的,将floatordouble用于财务是一个常见的错误,会导致非常非常痛苦。decimal在这种情况下是最明显的选择。

对于一般知识,这里(浮点数/双精度)和这里(十进制)对每个都有很好的讨论。

于 2008-10-24T04:03:41.447 回答
2

这并不像你想象的那么明显。我最近让一家大公司的财务主管告诉我,他希望他的财务报告与 Excel 生成的结果相匹配,即在内部以最大精度保持计算结果,并且仅在最后一分钟四舍五入以进行显示。这意味着您不能总是通过仅使用显示值的手动计算来匹配 Excel 答案。他的解释是,有多种算法可以生成结果,每种算法都使用十进制值在不同的位置进行四舍五入,因此可能会生成相互冲突的答案,但 Excel 方法总是生成相同的答案。

我个人认为他是错的,但是有这么多财务人员使用 Excel 却不了解如何正确使用它进行财务计算,我敢打赌有很多人同意这个控制器。

我不想引发一场宗教战争,但我很想听听对此的其他意见。

于 2008-10-24T04:27:59.170 回答
1

如果是“科学”测量(我的意思是重量、长度、面积等),请使用双倍。

如果它是财务的,或者与法律有关(例如财产的面积),那么使用小数。

困难的部分是四舍五入。

如果税率为 2.4%,您是在细节中四舍五入还是在总和之后四舍五入?

大多数时候你必须两者都做(并修复差异)

于 2008-10-24T04:50:55.207 回答
1

我遇到过几次。许多语言都没有内置任何类型,对于不理解问题的人来说,这似乎只是另一个麻烦,特别是如果它看起来没有它就可以按预期工作。

于 2009-04-17T22:43:07.127 回答
0

我一直使用十进制。至少当我有一种支持它的语言时。否则,舍入错误会杀死你。

于 2008-10-24T04:02:29.657 回答
0

我完全同意上面提到的浮点与小数的正确性问题,但许多金融应用程序对性能至关重要。

在这种情况下,您将考虑使用浮点数/双精度数,因为在硬件不支持小数类型的系统中,十进制对性能有很大影响。仍然可以将浮点类型包装在表示域模型的更高级别的类(例如,Tax、Commission、Balance、Dividend、Quote、Tick 等)中,并封装所有舍入逻辑以及这些类型上的有效运算符以及他们的互动。是的 - 在一些项目中,我已经实现了自定义舍入函数,与 .NET 或 win32 方法相比,可以将计算量提高 20%。

要考虑的另一件事是您是否将对象传递到进程之外,因为序列化通常是 4 个整数的小数并通过网络传递它们会占用更多 CPU(尤其是如果不支持),并且会导致显着增加带宽和更大的内存占用。

于 2011-05-16T20:53:54.720 回答