在c#中用于金钱的最佳数据types是什么?

在c#中用于金钱的最佳数据types是什么?

正如小数点所描述的那样:

decimal关键字表示128位数据types。 与浮点types相比,小数types具有更高的精度和更小的范围, 适用于财务和货币计算。

您可以使用小数点,如下所示:

decimal myMoney = 300.5m; 

System.Decimal

十进制值types表示从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335的十进制数。 十进制值types适用于需要大量重要的整数和小数位且没有舍入误差的财务计算。 十进制types不排除舍入的需要。 相反,它将由于四舍五入而导致的错误最小化。

我想指出这个优秀的答案,通过偷偷摸摸为什么不应该使用双。

从企业应用程序体系结构的模式中使用Money模式 ; 将金额指定为小数,将货币指定为枚举。

小数。 如果你select了两倍,你会打开四舍五入错误

小数的范围更小,但精度更高 – 所以你不会失去所有这些便士!

全部细节在这里:

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

同意Money模式:使用小数时处理货币太麻烦了。

如果你创build了一个Currency类,那么你就可以把所有关于金钱的逻辑放到那里,包括一个正确的ToString()方法,更多的parsing值控制和更好的分割控制。

此外,在货币类别中,不会有意无意地将资金与其他数据混合在一起。

另一个选项(特别是如果你是自己的类)是使用一个int或一个int64,并指定低四位(甚至可能是2)作为“小数点右”。 所以“边缘”你需要一些“* 10000”的方式和一些“/ 10000”的出路。 这是Microsoft的SQL Server使用的存储机制,请参阅http://msdn.microsoft.com/zh-cn/library/ms179882.aspx

这样做的好处是所有的求和都可以使用(快速)整数算术来完成。

创build你自己的class级。 这似乎很奇怪,但.Nettypes不足以涵盖不同的货币。