我经常看到有人在c#中使用双精度对象。我知道我在什么地方读到过,double有时会失去精度。 我的问题是,什么时候应该使用双精度型,什么时候应该使用十进制类型? 哪种类型适合货币计算?(即。超过1亿美元)
当前回答
十进制表示精确值。Double表示近似值。
USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
其他回答
我认为除了位宽之外的主要区别是十进制的指数以10为底,而double的指数为2
http://software-product-development.blogspot.com/2008/07/net-double-vs-decimal.html
一定要使用整数类型进行金钱计算。 这一点再怎么强调也不为过,因为乍一看,浮点类型就足够了。
下面是python代码中的一个例子:
>>> amount = float(100.00) # one hundred dollars
>>> print amount
100.0
>>> new_amount = amount + 1
>>> print new_amount
101.0
>>> print new_amount - amount
>>> 1.0
看起来很正常。
现在再试试10^20津巴布韦元:
>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0
如你所见,美元消失了。
如果你使用整数类型,它工作得很好:
>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1
对于钱,总是小数。这就是它被创建的原因。
如果数字必须正确相加或平衡,请使用十进制。这包括任何财务存储或计算、分数或其他人们可能手工完成的数字。
如果数字的确切值不重要,可以使用double来加快速度。这包括图形学、物理学或其他物理科学计算,其中已经有“有效数字的数量”。
对于钱:十进制。它消耗更多的内存,但不像double有时会有舍入问题。
十进制表示精确值。Double表示近似值。
USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 如何舍入一个双到最近的Int在迅速?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?