我应该用什么数据类型来表示C#中的钱?

A S*_*edo 51 c#

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

And*_*are 75

用途System.Decimal:

十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335. 十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算.Decimal类型不会消除舍入的需要.相反,它最大限度地减少了因舍入而导致的错误.

既不System.Single(float)也不System.Double(double)足够精确 能够表示高精度浮点数而不会出现舍入误差.

  • 我赞成这一点,但我对最终索赔提出异议.并不是浮动/双重不够精确 - 只是他们使用不合适的基础来赚钱.你可以有一个512位浮点二进制点值,其实际*精度*比十进制更多 - 但它仍然不合适,因为它不能精确地表示十进制值,如0.1. (11认同)
  • 你应该说的是,任何具有二进制尾数的*有限*浮点系统都不能*精确*代表所有十进制数.也就是说,*没有累积表示错误*.有关浮点运算中表示错误的基本问题的更多分析,您可能希望看到我在此主题上撰写的系列文章:http://blogs.msdn.com/ericlippert/archive/tags/Floating+Point+Arithmetic /default.aspx (4认同)