簡體   English   中英

C#十進制和雙精度

[英]C# decimal and double

據我了解,十進制用於精度,建議用於貨幣計算。 雙精度提供更好的范圍,但精度較低,並且比十進制快很多。

如果我有時間和匯率,該怎么辦?我覺得double適合時間,而十進制適合匯率。 我不能將兩者混在一起並在不進行強制轉換的情況下運行計算,這是另一個性能瓶頸。 最好的方法是什么? 只是使用小數表示時間和費率?

兩者都使用double decimal適用於貨幣或其他以10為底的數字表示形式很重要的情況。 如果您不關心數字以10為底的表示形式,請不要使用decimal 對於時間或物理量變化率之類的東西,以10為基數的表示形式通常並不重要,因此decimal不是最合適的選擇。

要意識到的重要一點是, decimal仍然是浮點類型。 它仍然遭受舍入誤差並且不能表示某些“簡單”數字(例如1/3)。 它的一個優點(也是一種目的)是,它可以精確地表示少於29個有效數字的十進制數。 這意味着像0.1或12345.6789這樣的數字。 基本上,您可以在紙上寫下少於29位數字的任何小數。 如果您有重復的小數或無理數,則decimal沒有太大的好處。

經驗法則是使用更適合您將要處理的值的類型。 這意味着您應該使用DateTimeTimeSpan作為時間,除非您只關心特定的單位,例如秒,天等,在這種情況下,您可以使用任何整數類型。 通常情況下,您需要精度並且不希望由於舍入而導致任何錯誤,因此我不會使用任何浮點類型,例如floatdouble

對於任何與金錢相關的東西,您當然也不需要任何舍入誤差,因此您實際上應該在此處使用decimal

最后,只有對於某些非常特定的要求,您需要在進行 數百萬次計算的過程中需要絕對速度並且decimal恰好不夠快時, 可以考慮使用另一種更快的類型。 我將首先嘗試使用整數值(如果有小數,則可以將值乘以10的冪),最后只除以10的冪。 如果無法做到這一點, 那么我只會考慮使用double 如果不確定是否需要過早的優化 ,請不要進行。

暫無
暫無

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

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