是C#';s十进制会计保险柜?

是C#';s十进制会计保险柜?,c#,types,decimal,C#,Types,Decimal,I.十进制类型的范围为(-7.9 x 10^28到7.9 x 10^28)/(10^0到10^28),并且“适合于财务和货币计算。” 我似乎找不到一个来源说十进制可以代表从($79000000000000000000000.00)到$79000000000000000000000.00的所有值 Decimal是128位类型,128位可以表示从-10^38到10^38的每一分钱。但我不知道十进制是如何实现的,因此对于floats,数字从0开始越远,精度可能会降低。 Decimal value类型表

I.
十进制
类型的范围为(-7.9 x 10^28到7.9 x 10^28)/(10^0到10^28),并且“适合于财务和货币计算。”

我似乎找不到一个来源说十进制可以代表从($79000000000000000000000.00)到$79000000000000000000000.00的所有值

Decimal
是128位类型,128位可以表示从-10^38到10^38的每一分钱。但我不知道十进制是如何实现的,因此对于
float
s,数字从0开始越远,精度可能会降低。

Decimal value类型表示从 正极79228162514264337593543950335至负极 79,228,162,514,264,337,593,543,950,335. 十进制值类型为 适用于需要大量数据的财务计算 有效整数和小数位数,无舍入误差十进制类型并不排除四舍五入的需要。相反,它将舍入误差降至最低。

有关更多信息,请参见

我似乎找不到一个来源说十进制可以代表从($79000000000000000000000.00)到$79000000000000000000000.00的所有值

那是因为它不能<代码>十进制最多允许29位有效精度数字。这意味着如果你想保持精确到一便士,那么你的最大安全值实际上是
(Decimal.MaxValue-1)/100
(或者
$792281625142643375935439503.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
是一个安全限制,那么你就可以了。

小数引起的舍入误差会直接转移到比尔·盖茨的私人银行账户。请记住,如果你想保持一分钱的准确性,那么你的“最大值”就可以了值真的是
Decimal.MaxValue/100
很好的答案。只需添加此项了解更多信息:如果Decimal不够精确(我非常怀疑…),那么您还可以查看以下内容: