Dot-Net
.NET 十進制的二進製表示
.NET 類型如何
decimal在記憶體中以二進制形式表示?我們都知道浮點數是如何儲存的,因此也知道其不准確的原因,但
decimal除了以下內容,我找不到任何資訊:
- 顯然比浮點數更準確
- 佔用 128 位記憶體
- 2^96 + 符號範圍
- 28(有時是 29?)總數中的有效數字
有什麼辦法可以解決這個問題嗎?我內心的電腦科學家要求答案,經過一個小時的嘗試研究,我找不到答案。似乎要麼有很多浪費的位,要麼我只是在腦海中想像這個錯誤。任何人都可以對此有所了解嗎?
Decimal.GetBits獲取您想要的資訊。基本上它是一個 96 位整數作為尾數,加上一個符號位,再加上一個指數來表示將其向右移動多少小數位。
因此,要表示 3.261,您的尾數為 3261,符號位為 0(即正數),指數為 3。請注意,十進制未標準化(故意),因此您也可以通過使用尾數來表示 3.2610例如,32610 和 4 的指數。
我在關於十進制浮點數的文章中有更多資訊。