c#误解中的小数?

Roy*_*mir 10 .net c# clr decimal

(在尝试分析decimal工作原理时)&&阅读@jonskeet文章 并看到msdn,并思考过去4个小时后, 我有一些问题:

这个链接中,他们说的很简单:

1.5 x 10^22重要数字

1.50 x 10^23重要数字.

1.500 x 10^24重要数字等...

好的......我们明白了.

来自jon的文章:

 sign * mantissa / 10^exponent
Run Code Online (Sandbox Code Playgroud)

像往常一样,符号只是一个位,但有96位尾数和5位指数

 ^ _ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___ ^^^^^

 1 _                     96                         5
Run Code Online (Sandbox Code Playgroud)

所以max mantiss val = 2^96-1 = 79228162514264337593543950335这是:( 7.9228162514264*10^28 根据我的iphone ...在windows calc中无法看到指数表示.)

注意 :

7.9228162514264*10^2814位有效数字(根据以上例子)

现在指数为5位的部分是无关紧要的,因为它在分母中 - 所以我需要最小值为2 ^ 0

问题#1:

msdn说: 在此输入图像描述 28-29 significant digits

但根据我的样本(1.500 x 10^24重要数字),他们有2个 有效数字,即7.9(7和9).

如果msdn写了:

±79228162514264337593543950335 × 10^0
Run Code Online (Sandbox Code Playgroud)

我会理解这一点,因为所有有效数字都在表达式中.

为什么他们写28-29但显示2?

问题2 :

如何为值0.5显示十进制表示(mantiss && exponent)?

最大分母可以 2^32-1 --> 31

多谢你们.

问题#3:

1 + 96 + 5 = 102位.

msdn说:

decimal关键字表示128位数据类型.

128-102 = 26
Run Code Online (Sandbox Code Playgroud)

可以从文章中了解为什么没有使用这26位

Jon*_*eet 7

他们将范围给出了两位有效数字,但是分别指定了精度.这就是为什么范围被列为"近似范围".

decimal0.5 的表示将是5的尾数和1的指数(其在反向意义上处理为正常,即它实际上为 -1).