2012-06-28 82 views

回答

8

第二最小值爲Decimal.MinValue + 1

這可以從文檔被推斷爲decimal

的十進制數是一個浮點值,它由一個符號,一個 數字值,其中在所述值的每個數字範圍從0到9 ,以及一個表示浮點小數點位置的比例因子 ,用於分隔數值的整數部分和小數部分。

十進制值的二進制表示由一個1位符號,一個96位整數和一個縮放因子組成,用於分割96位整數並指定它的哪一部分是小數部分。 縮放因子隱含地是數字10,被提升爲從0到28範圍的指數 。因此, 十進制值的二進制表示形式爲((-2^96到2^96)/ 10^(0至28)),其中 -2^96-1等於MinValue,並且2^96-1等於MaxValue。

從上面我們可以推斷,在法律值範圍的極端邊緣,縮放因子是1(10到電力0),因此這是最小量子當十進制值被修改。

Live proof

6

According to MSDN,十進制表示像((-2^96 to 2^96)/10^(0 to 28)),其中-2^96-1等於MinValue,和2^96-1等於MaxValue,所以兩位小數之間的最小差是1/10^28
雖然小小數之間只有這種差異。通常,隨着小數變大(無論符號如何),您將丟失小數點,直到沒有剩餘小數點。

更新:正如在評論中指出的那樣,您實際上不能通過添加最小十進制值(如上所述)來更改decimal.MinValue。十進制數字有1位符號,96位數字和數字分割的比例因子(10^x)。

爲了得到如此大的負數,縮放因子的指數部分必須設置爲0( - > 10^0 == 1),因爲將其設置爲更高的值會導致數字爲除以它,因此它會變小。

這意味着,對於這樣的數字,最小的差異將是1/10^01

所以您正在尋找這樣的:

decimal.MinValue + 1m; 
+0

+1,我*認爲*這是OP之後的內容。可能的答案是'Decimal.MinValue + 0.000 ... 1'。 –

+0

@ Botz3000,@George:但是'(Decimal.MinValue + 0.000 ... 1)== Decimal.MinValue'。 – LukeH

+1

-1:這是不正確的。比例因子表示96位的小數部分。您可以通過檢查「Decimal.MinValue + 0.000001m」是什麼來簡單確認。 – Jon

相關問題