2013-03-11 29 views
3

什麼是VB或C#中的「十進制」值的內部格式?vb/c#十進制內部格式

我不知道這對我立即做的任何事情都很重要,但它是其中一件很好的事情。比如,知道存儲多少位數和如何存儲負數可能意味着,當您看到一個負數時出現正確的預期位置時,您可以立即想到「啊,出現了溢出」,而不是被深奧的謎團困擾。

+1

http://stackoverflow.com/questions/618535/what-is-the-difference-between-decimal-float-and-double-in-c或甚至更好http://csharpindepth.com/Articles /General/Decimal.aspx – 2013-03-11 21:25:42

回答

7

回答你的問題在全Technicolor公司由documentation提供:

十進制值類型代表的十進制數從 積極79,228,162,514,264,337,593,543,950,335負 79,228,162,514,264,337,593,543,950,335。十進制值類型爲 ,適用於需要大量的重要整數和小數位且沒有舍入誤差的財務計算。 十進制類型不排除舍入的需要。相反,它由於四捨五入而使錯誤最小化。

的十進制數是一個浮點值,它由一個符號,一個 數字值,其中在所述值的每個數字範圍從0到9,和一個 縮放因子,其指示浮動小數點的 的位置它分隔數值的整數部分和小數部分。

十進制值的二進制表示由一個1位符號,一個96位整數和一個縮放因子組成,用於分割96位整數並指定它的哪一部分是小數部分。 縮放因子是隱式地數目爲10,升溫至範圍從0到28。因此指數 ,一個 十進制值的二進制表示的形式爲,((-2 至2 )/ 10 (0至28)),其中 -2 -1等於MinValue,並且2 -1等於MaxValue。有關十進制值的二進制表示形式和示例的更多信息,請參閱Decimal(Int32[])構造函數和GetBits方法。

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

並且二進制表示,如文檔中爲GetBits描述:

一個十進制數的二進制表示由一個1位 標誌,96位整數,和一個縮放因子,用於分割整數,並指定它的哪一部分是小數部分。 縮放因子隱含地是數字10,被提升爲指數 ,範圍從0到28。返回值是32位有符號整數的四元素數組。

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

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

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

位16至23必須包含0到28之間的指數,其中 指示10的冪來劃分整數。

位24到30未使用且必須爲零。

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

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

+0

謝謝。我沒有想到在System.decimal下查看,我正在查看標準數據類型的列表,他們討論範圍但不是格式。好吧,也許這應該是一個顯而易見的地方,我有一個腦凍結。 – Jay 2013-03-12 17:17:30

1

C#和VB.NET decimalSystem.Decimal,這是有據可查的:System.Decimal

decimal (C# Reference)

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

範圍:±1.0×10-28到±7.9×1028 精密:28-29顯著數字

Decimal Data Type (Visual Basic)

暫掛簽署表示128位(16字節)值96位(12字節) 整數以10的可變冪縮放。縮放因子 指定小數點右側的位數;其 的範圍從0到28.對於0(無小數位)的比例,最大可能值是+/- 79,228,162,514,264,337,593,543,950,335, (+/- 7.9228162514264337593543950335E + 28)。在小數點後28位,最大值爲+/- 7.9228162514264337593543950335,非零值爲最小值+/- 0.0000000000000000000000000001(+/- 1E-28)。