簡體   English   中英

vb / c#decimal內部格式

[英]vb/c# decimal internal format

VB或C#中“十進制”值的內部格式是什么?

我不知道這對我正在做的任何事都很重要,但這是其中一件很有趣的事情。 比如,知道多少位和負數如何存儲可能意味着當你看到一個負數出現在你預期的正面時,你可以立刻想到,“啊,有一個溢出”,而不是被深深的黑暗奧秘困惑。

您的問題的答案由文檔提供完整的技術說明

十進制值類型表示十進制數,范圍從正數79,228,162,514,264,337,593,543,950,335到負數79,228,162,514,264,337,593,543,950,335。 Decimal值類型適用於需要大量有效積分和小數位且沒有舍入誤差的財務計算。 Decimal類型不會消除舍入的需要。 相反,它最大限度地減少了因舍入而導致的錯誤。

十進制數是一個浮點值,由一個符號,一個數值組成,其中值中的每個數字范圍從0到9,以及一個縮放系數,表示浮動小數點的位置,用於分隔積分和小數部分的數值。

Decimal值的二進制表示由1位符號,96位整數和用於划分96位整數的比例因子組成,並指定它的小數部分。 縮放因子隱式為數字10,上升到指數范圍從0到28.因此,十進制值的二進制表示形式為((-2 96到2 96 )/ 10 (0到28) ) ,其中-2 96 -1等於MinValue,2 96 -1等於MaxValue。 有關Decimal值的二進制表示的詳細信息和示例,請參閱Decimal(Int32 [])構造函數和GetBits方法。

縮放因子還保留十進制數中的任何尾隨零。 尾隨零不影響算術或比較運算中的十進制數的值。 但是,如果應用了適當的格式字符串,則ToString方法可以顯示尾隨零。

和二進制表示,如GetBits的文檔中GetBits

十進制數的二進制表示由1位符號,96位整數和用於除以整數的縮放因子組成,並指定它的哪個部分是小數。 縮放因子隱含地為數字10,增加到范圍從0到28的指數。

返回值是32位有符號整數的四元素數組。

返回數組的第一,第二和第三個元素包含96位整數的低,中和高32位。

返回數組的第四個元素包含比例因子和符號。 它由以下部分組成:

低位字0到15位未使用,必須為零。

位16到23必須包含0到28之間的指數,表示除以整數的10的冪。

第24至30位未使用,必須為零。

位31包含符號:0表示正數,1表示負數。

注意,位表示區分負零和正零。 在所有操作中,這些值被視為相等。

c#和VB.NET decimalSystem.Decimal ,它有很好的文檔: System.Decimal

十進制(C#參考)

decimal關鍵字表示128位數據類型。 與浮點類型相比,十進制類型具有更高的精度和更小的范圍,這使其適用於財務和貨幣計算。 十進制類型的近似范圍和精度如下表所示。

范圍:±1.0×10-28至±7.9×1028精度:28-29位有效數字

十進制數據類型(Visual Basic)

保持有符號的128位(16字節)值,表示由可變冪10進行縮放的96位(12字節)整數。縮放因子指定小數點右側的位數; 它的范圍從0到28.標度為0(無小數位),最大可能值為+/- 79,228,162,514,264,337,593,543,950,335(+/- 7.9228162514264337593543950335E + 28)。 小數位數為28,最大值為+/- 7.9228162514264337593543950335,最小非零值為+/- 0.0000000000000000000000000001(+/- 1E-28)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM