C#中對於float,double,decimal的誤解

原文: C#中對於float,double,decimal的誤解

一直很奇怪C#的預約義數據類型中爲何加了一個decimal,有float和double不就夠了嗎?今天來挖一挖。
浮點型html

C#中對於float,double,decimal的誤解

若是咱們在代碼中寫一個12.3,編譯器會自動認爲這個數是個double型。因此若是咱們想指定12.3爲float類型,那麼你必須在數字後面加上F/f:
float f = 12.3F;url

decimal類型
做爲補充,decimal類型用來表示高精度的浮點數.net

C#中對於float,double,decimal的誤解
對decimal、float、double錯誤的認識
引用自:http://topic.csdn.net/t/20050514/20/4007155.html 中Ivony的評論htm

在精確計算中使用浮點數是很是危險的,儘管C#在浮點數運算時採起了不少措施使得浮點數運算的結果看起來是很是正常的。但實際上若是不清楚浮點數的特性而貿然使用的話,將形成很是嚴重的隱患。  
   
  考慮下面的語句:  
   
              double   dd    10000000000000000000000d 
              dd   +=   1;  
              Console.WriteLine    "{0:G50}",   dd   );  
   
  輸出是什麼?誰知道?  
  輸出是:100000000000000000000000 
   
  這就是浮點數精度損失的問題,最重要的是,在精度損失的時候,不會報告任何的錯誤,也不會有任何的異常產生。  
   
  浮點數的精度損失可能在不少地方出現,例如d       不必定等於d,d      g也不必定等於d。  
   
  還有兩個很是危險的錯誤認識!!  
   
  一、decimal不是浮點型、decimal不存在精度損失。  
   
  下面有段程序你們能夠去看看結果是什麼。記住!全部的浮點型變量都存在精度損失的問題,而decimal是一個徹徹底底的浮點型,不論它精度有多高,精度損失依然存在!  
   
                  decimal   dd    10000000000000000000000000000m;  
                  dd   +=   0.1m;  
                  Console.WriteLine    "{0:G50}",   dd   );  
   
  二、decimal所能儲存的數比double大,從double到decimal的類型轉換不會出現任何問題。  
   
  微軟在decimal的幫助上真的要好好檢討了。實際上只有從整形到decimal的轉換纔是擴大轉換,decimal的精度比double大,但所能儲存的最大數卻比double要小。blog


本文來自CSDN博客,http://blog.csdn.net/ccy3253/archive/2008/01/28/2070616.aspxci

相關文章
相關標籤/搜索