簡體   English   中英

為什么 C# System.Decimal 會記住尾隨零?

[英]Why does a C# System.Decimal remember trailing zeros?

C# System.Decimal 是否有理由記住它輸入的尾隨零的數量? 請參見以下示例:

public void DoSomething()
{
    decimal dec1 = 0.5M;
    decimal dec2 = 0.50M;
    Console.WriteLine(dec1);            //Output: 0.5
    Console.WriteLine(dec2);            //Output: 0.50
    Console.WriteLine(dec1 == dec2);    //Output: True
}

小數被歸類為相等,但dec2記得它是用額外的零輸入的。 這樣做的原因/目的是什么?

表示包括其准確性的數字可能很有用 - 因此0.5m可用於表示“0.45m到0.55m之間的任何東西”(有適當的限制),0.50m可用於表示“0.495m到0.545m之間的任何東西” ”。

我懷疑大多數開發人員實際上並沒有使用這個功能,但我可以看到它有時會如何有用。

我相信這個能力首先來自.NET 1.1,順便說一下 - 我認為1.0中的小數總是有效地歸一化。

我認為這樣做是為了從數據庫中檢索的數值提供更好的內部表示。 Dbase引擎具有以十進制格式存儲數字(避免舍入錯誤)的悠久歷史,並且具有對值中的數字位數的明確規范。

例如,比較SQL Server 十進制和數字列類型

小數表示固定精度的十進制值。 文字值0.50M嵌入了2位小數精度,因此創建的小數變量會記住它是2位小數位值。 行為完全是設計的。

值的比較是對值的精確數值相等性檢查,因此,尾隨零不會影響結果。

暫無
暫無

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

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