(在尝试分析 decimal
的工作原理时)&& 在阅读 @jonskeet article 之后看到 msdn ,并思考了最后 4 个小时,
我有一些问题:
在this link他们说的很简单:
1.5 x 10^2
有 2
位有效数字
1.50 x 10^2
有 3
位有效数字。
1.500 x 10^2
有 4
有效数字等...
好的...我们明白了。
来自 jon 的文章:
sign * mantissa / 10^exponent
As usual, the sign is just a single bit, but there are 96 bits of mantissa and 5 bits of exponent
^ _ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___ ^^^^^
1 _ 96 5
好的
so max mantiss val = 2^96-1 = 79228162514264337593543950335
即:7.9228162514264*10^28
(根据我的 iphone...在 Windows Calc 中看不到指数表示法。)
注意事项:
7.9228162514264*10^28
有 14 个有效数字(根据上面的例子)
现在指数中第 5 位的部分是无关紧要的,因为它在分母中 - 所以我需要最小值 2^0
问题#1:
msdn 说: 28-29 位有效数字
但根据我的样本(1.500 x 10^2
有 4
有效数字)他们有 2有效数字为 7.9
(7 和 9)。
如果 msdn 会这样写:
±79228162514264337593543950335 × 10^0
我会理解这一点,因为所有有效数字都在表达式中。
为什么他们写 28-29 但显示 2 ?
问题 #2:
值 0.5 将如何显示小数表示法(尾数 && 指数)?
最大分母可以是 2^32-1 --> 31
谢谢你们。
问题 #3:
1+96+5 = 102 位。
msdn 说:
The decimal keyword denotes a 128-bit data type.
128-102 = 26
可以从文章中理解为什么这 26 位没有用法
最佳答案
他们将范围 指定为两位有效数字,但分别指定了精度。这就是该范围被列为“近似范围”的原因。
0.5 的 decimal
表示形式是 5 的尾数和 1 的指数(这与正常情况相反,即 有效 -1) .
关于c# - c# 中的 decimal 误解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614592/