我read Decimal
类型的范围为(-7.9 x 10 ^ 28到7.9 x 10 ^ 28)/(10 ^ 0到10 ^ 28)并且它是& #34;适用于财务和货币计算。"
我似乎无法找到一个来源,说明Decimal可以代表到便士所有价值从($ 79,000,000,000,000,000,000,000,000,000.00)到$ 79,000,000,000,000,000,000,000,000,000,000,000.00。
Decimal
是128位类型,128位可以代表从-10 ^ 38到10 ^ 38的每一分钱。但是我不知道Decimal是如何实现的,所以与float
一样,可能会有一分钱精度损失,数字从0变为越远。
答案 0 :(得分:6)
十进制值类型表示范围从的十进制数 为负数为79,228,162,514,264,337,593,543,950,335 79,228,162,514,264,337,593,543,950,335。 Decimal值类型是 适用于需要大量资金的财务计算 显着的积分和小数位数以及没有舍入错误。 Decimal类型不会消除舍入的需要。相反,它可以最大限度地减少因舍入而导致的错误。
有关详细信息,您可能会看到Decimal floating point in .NET by Jon Skeet
答案 1 :(得分:1)
我似乎无法找到一个消息来源说Decimal可以代表所有价值从($ 79,000,000,000,000,000,000,000,000,000.00)到$ 79,000,000,000,000,000,000,000,000,000,000,000.00。
那是因为它不能。 decimal
允许最多 29个有效数字的精度。这意味着如果您希望将精确度保持为便士,那么您的最大安全值实际为(Decimal.MaxValue -1)/100
(或$792,281,625,142,643,375,935,439,503.30
:
(Decimal.MaxValue - (Decimal.MaxValue - 0.01m)) == 0
(Decimal.MaxValue/100- (Decimal.MaxValue/100 - 0.01m)) == 0 // why?
(((Decimal.MaxValue-1)/100)- ((Decimal.MaxValue-1)/100 - 0.01m)) == 0.01
注意:我不确定为什么Decimal.MaxValue/100
不起作用,但如果Decimal.MaxValue - 1
是安全限制,那么你应该没问题。