提问人:Soni Ali 提问时间:7/22/2009 最后编辑:HerbalMartSoni Ali 更新时间:11/16/2022 访问量:571618
十进制与双精度!- 我应该使用哪一个,何时使用?[复制]
decimal vs double! - Which one should I use and when? [duplicate]
问:
我一直看到人们在 C# 中使用双精度。我知道我在某个地方读到,双倍有时会失去精确度。 我的问题是什么时候应该使用双精度,什么时候应该使用十进制类型? 哪种类型适合货币计算?(即超过1亿美元)
答:
为了钱: .它需要更多的内存,但不会像有时那样有舍入问题。decimal
double
评论
1m/3m + 1m/3m == 2m/3m
1m/5m + 1m/5m
2m/5m
对于金钱,总是十进制。这就是它被创建的原因。
如果数字必须正确相加或平衡,请使用十进制。这包括人们可能手动完成的任何财务存储或计算、分数或其他数字。
如果数字的确切值不重要,请使用 double 表示速度。这包括图形、物理或其他物理科学计算,其中已经有“有效数字数”。
评论
0.1 * 0.1 != 0.01
一定要使用整数类型进行货币计算。
这一点怎么强调都不为过,因为乍一看,浮点类型似乎就足够了。
下面是 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
评论
int
decimal
double
decimal
十进制表示精确值。Double 表示近似值。
USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
评论
我的问题是什么时候应该使用 double 和什么时候应该使用小数 类型?
decimal
因为当你处理 10^(+/-28) 范围内的值时,并且你对基于基数 10 表示的行为有期望 - 基本上是金钱。
double
因为当您需要相对精度(即在大值上失去尾部数字的精度不是问题)时,跨越截然不同的量级 - 覆盖超过 10^(+/-300)。科学计算就是最好的例子。double
哪种类型适合钱 计算?
十进制,十进制,十进制
不接受替代品。
最重要的因素是,作为二进制分数实现时,根本无法准确地表示许多分数(如 0.1),并且其总位数较小,因为它的宽度为 64 位,而 .最后,金融应用程序通常必须遵循特定的舍入模式(有时是法律规定的)。 支持这些; 不。double
decimal
decimal
decimal
double
评论
double
double
decimal
Math.Round
MidpointRounding
double
decimal
根据浮点类型的特征:
.NET 类型 | C# 关键字 | 精度 |
---|---|---|
System.Single |
浮 | ~6-9 位数字 |
System.Double |
双 | ~15-17 位数字 |
System.Decimal |
十进制 | 28-29 位数字 |
我被使用错误类型(几年前)刺痛的方式是大量:
- £520,532.52 - 8 位数字
- £1,323,523.12 - 9 位数字
你用完了 100 万的浮动。
15 位货币价值:
- 1,234,567,890,123.45英镑
9万亿,翻了一番。但是对于除法和比较,它就更复杂了(我绝对不是浮点数和无理数方面的专家——参见 Marc 的观点)。混合使用小数和双精度会导致问题:
数学或比较运算 使用浮点数 如果出现以下情况,可能不会产生相同的结果 使用十进制数是因为 浮点数可能不会 精确近似于小数点 数。
什么时候应该使用双精度而不是十进制?有一些类似且更深入的答案。
使用而不是货币应用程序是一种微优化 - 这是我看待它的最简单方式。double
decimal
评论
520,532.52
具有 8 个有效数,具有 9 个 mathsfirst.massey.ac.nz/Algebra/Decimals/SigFig.htm1,323,523.12
float
double
decimal
我认为除了位宽之外的主要区别在于十进制的指数底数为 10,而双精度的指数底数为 2
http://software-product-development.blogspot.com/2008/07/net-double-vs-decimal.html
评论