10r*_*r01 58 .net c# decimal floating-accuracy
昨天在调试期间发生了一些奇怪的事情,我无法解释它:
所以也许我没有在这里看到明显的或者我误解了.NET中的小数,但结果是否应该相同?
Lua*_*aan 69
decimal
对我来说,所有数学都不是神奇的.它仍然是一个浮点数 - 主要区别float
在于它是一个十进制浮点数,而不是二进制数.因此,您可以轻松地表示0.3
为十进制(它不可能作为有限二进制数),但您没有无限精度.
这使得它更接近人类进行相同的计算,但你仍然需要想象某人单独进行每项操作.它专门用于财务计算,你不会在数学中做那种事情 - 你只需要一步一步地按照非常具体的规则舍入每个结果.
事实上,对于许多情况,decimal
可能比float
(或更好double
)更糟糕.这是因为decimal
根本不进行任何自动舍入.做同样的double
事情会给你22个预期,因为它会自动地假设差异无关紧要 - 在decimal
,它确实 - 这是重要的一点decimal
.Math.Round
当然,您可以通过插入手册来模拟这一点,但这没有多大意义.
phu*_*clv 30
Decimal
只能在精度限制内精确存储十进制精确值.这里22/24 = 0.91666666666666666666666 ...需要无限精度或合理类型来存储,并且在舍入后它不等于22/24.
如果先进行乘法,那么所有的值都是完全可表示的,因此您看到了结果.
Say*_*yse 14
通过添加括号,您可以确保在乘法之前计算除法.这种微妙的看起来足以影响计算,足以引入浮动精度问题.
由于计算机实际上无法生成所有可能的数字,因此您应该确保将其计算在计算中
归档时间: |
|
查看次数: |
3974 次 |
最近记录: |