2010-09-27 25 views
15

嘿,所有,快速的問題:如何在內存中的二進制代碼的.NET decimal.NET十進制的二進制表示形式

我們都知道浮點數是如何存儲和正是如此的原因及其不準確的,但我不能找到除了以下有關的任何信息decimal

  1. 顯然超過浮點精確點號碼
  2. 注意到的存儲器128位
  3. 2^96 +符號範圍
  4. 28(有時29?)的數量總顯著數字

有什麼辦法可以解決這個問題嗎?我的計算機科學家要求答案,經過一個小時的嘗試研究,我找不到它。看起來好像有很多浪費的東西,或者我只是想象着我腦海中的錯誤。任何人都可以對此有所瞭解嗎?謝謝。

回答

30

Decimal.GetBits獲取您想要的信息。

基本上它是一個96位整數作爲尾數,再加上一個符號位,再加上一個指數來表示有多少個十進制位置可以將它移到右邊。

所以代表3.261你有3261尾數,0(即正)的符號位,而小數點不歸(故意)的3.注意的指數,所以你可以代表例如,通過使用32610的尾數和4的指數來計算3.2610。

我在我的文章decimal floating point有更多的信息。

+0

+1奇妙的答案,正確的重點和豐富的信息。 – JoshD 2010-09-27 06:15:53

+0

@Jacob:不,那*顯然*不是真的。考慮到你可以從一個整數開始並以0.1結束,那顯然是正確的。如果你只能*轉移到左邊,你可以代表10,100等 - 但不是0.1,0.01等等。將來,請等待一個「ack」,然後再改變答案的含義。請參閱'decimal'的文檔:http://msdn.microsoft.com/en-us/library/1k2e8atx.aspx - 其中縮放因子被稱爲「分割」整數,相當於將其轉換爲對。 – 2013-02-13 06:45:11

+0

我的歉意。對我來說,更直觀地把它看作是將*小數點*移到*左*,但我現在看到你指的是「移位」尾數。 – Jacob 2013-02-13 15:59:32

相關問題