是C#';s十进制会计保险柜?
I.是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类型表
十进制
类型的范围为(-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不够精确(我非常怀疑…),那么您还可以查看以下内容: