Dav*_*vid 1002
为了钱,总是小数.这就是为什么它被创造出来的原因.
如果数字必须正确加或平衡,请使用小数.这包括人们可能手工完成的任何财务存储或计算,分数或其他数字.
如果数字的确切值不重要,请使用double表示速度.这包括图形,物理或其他物理科学计算,其中已经存在"有效位数".
Mic*_*rdt 173
我的问题是什么时候应该使用双倍,何时应该使用小数类型?
decimal 因为当你使用10 ^(+/- 28)范围内的值时,你对基于10个表示的行为有所期望 - 基本上是金钱.
double因为当你需要相对准确度(即在大值上的拖尾数字中丢失精度不是一个问题)时,它们的大小差别很大 - double覆盖超过10 ^(+/- 300).科学计算是这里最好的例子.
哪种类型适合货币计算?
十进制,十进制,十进制
不接受任何替代品.
最重要的因素是,double作为二进制分数实现,根本不能准确地表示许多decimal分数(如0.1),并且其总位数较小,因为它是64位宽而128位decimal.最后,财务应用程序通常必须遵循特定的舍入模式(有时是法律规定的).decimal 支持这些 ; double才不是.
Chr*_*s S 38
System.Single/float - 7位数字
System.Double/double - 15-16位数字
System.Decimal/decimal - 28-29有效数字
我使用错误的类型(好几年前)被蜇的方式是大量的:
你花了一百万用于浮动.
15位数的货币价值:
9万亿双倍.但是通过划分和比较它会更复杂(我绝对不是浮点数和无理数的专家 - 请参阅Marc的观点).混合小数和双精度会导致问题:
如果使用十进制数,使用浮点数的数学或比较操作可能不会产生相同的结果,因为浮点数可能不完全接近十进制数.
什么时候应该使用double而不是decimal?有一些类似和更深入的答案.
使用double而不是decimal 货币应用程序是一种微观优化 - 这是我看待它的最简单方法.
Ian*_*oyd 35
十进制是确切的值.Double表示近似值.
USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
Run Code Online (Sandbox Code Playgroud)
Cle*_*man 27
为了钱:decimal.它花费了更多的记忆,但没有像double有时那样的四舍五入的麻烦.
Ott*_*ger 10
绝对使用整数类型进行货币计算.这一点不够强调,因为乍一看似乎浮点类型就足够了.
这是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
Run Code Online (Sandbox Code Playgroud)
看起来很正常.
现在用10 ^ 20津巴布韦元再试一次
>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0
Run Code Online (Sandbox Code Playgroud)
如你所见,美元消失了.
如果你使用整数类型,它工作正常:
>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1
Run Code Online (Sandbox Code Playgroud)
我认为位宽旁边的主要区别是十进制有指数基数10而双数有2
http://software-product-development.blogspot.com/2008/07/net-double-vs-decimal.html
| 归档时间: |
|
| 查看次数: |
418928 次 |
| 最近记录: |