我应该用什么数据types来代表C#中的钱?

在C#中,我应该使用什么数据types来表示货币金额? 十进制? 浮动? 双? 我想考虑:精度,舍入等

使用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不排除舍入的需要。 相反,它将由于四舍五入而导致的错误最小化。

System.Singlefloat )和System.Doubledouble )都不是 足够精确 能够表示高精度的浮点数而不会产生舍入误差。

如果您使用SQL,请在数据库中使用十进制和金钱。

十进制是你想要的。

在C#中,Decimaltypes实际上是一个具有重载函数的结构,用于基数为10的所有math运算和比较运算,所以它将具有较小的舍入误差。 另一方面,float(和double)类似于二进制的科学记数法。 因此,当您知道所需的精度时,十进制types会更准确。

运行这个来看看2:

 using System; using System.Collections.Generic; using System.Text; namespace FloatVsDecimal { class Program { static void Main(string[] args) { Decimal _decimal = 1.0m; float _float = 1.0f; for (int _i = 0; _i < 5; _i++) { Console.WriteLine("float: {0}, decimal: {1}", _float.ToString("e10"), _decimal.ToString("e10")); _decimal += 0.1m; _float += 0.1f; } Console.ReadKey(); } } } 

考虑使用资金types的CLR 。 这是一个自定义值types(结构),也支持货币和处理四舍五入的问题。

在C#中,您应该使用“ 十进制 ”来表示货币金额。