C#中对于float,double,decimal的误解
一直很奇怪C#的預定義數據類型中為什么加了一個decimal,有float和double不就夠了嗎?今天來挖一挖。
浮點型
如果我們在代碼中寫一個12.3,編譯器會自動認為這個數是個double型。所以如果我們想指定12.3為float類型,那么你必須在數字后面加上F/f:
float f = 12.3F;
decimal類型
作為補充,decimal類型用來表示高精度的浮點數
對decimal、float、double錯誤的認識
引用自:http://topic.csdn.net/t/20050514/20/4007155.html 中Ivony的評論
在精確計算中使用浮點數是非常危險的,盡管C#在浮點數運算時采取了很多措施使得浮點數運算的結果看起來是非常正常的。但實際上如果不清楚浮點數的特性而貿然使用的話,將造成非常嚴重的隱患。??
???
? 考慮下面的語句:??
???
????????????? double?? dd?? =?? 10000000000000000000000d;??
????????????? dd?? +=?? 1;??
????????????? Console.WriteLine?? (?? "{0:G50}",?? dd?? );??
???
? 輸出是什么?誰知道???
? 輸出是:1000000000000000000000000??
???
? 這就是浮點數精度損失的問題,最重要的是,在精度損失的時候,不會報告任何的錯誤,也不會有任何的異常產生。??
???
? 浮點數的精度損失可能在很多地方出現,例如d?? *?? g?? /?? g?? 不一定等于d,d?? /?? g?? *?? g也不一定等于d。??
???
? 還有兩個非常危險的錯誤認識!!??
???
? 1、decimal不是浮點型、decimal不存在精度損失。??
???
? 下面有段程序大家可以去看看結果是什么。記住!所有的浮點型變量都存在精度損失的問題,而decimal是一個不折不扣的浮點型,不論它精度有多高,精度損失依然存在!??
???
????????????????? decimal?? dd?? =?? 10000000000000000000000000000m;??
????????????????? dd?? +=?? 0.1m;??
????????????????? Console.WriteLine?? (?? "{0:G50}",?? dd?? );??
???
? 2、decimal所能儲存的數比double大,從double到decimal的類型轉換不會出現任何問題。??
???
? 微軟在decimal的幫助上真的要好好反省了。實際上只有從整形到decimal的轉換才是擴大轉換,decimal的精度比double大,但所能儲存的最大數卻比double要小。
本文來自CSDN博客,http://blog.csdn.net/ccy3253/archive/2008/01/28/2070616.aspx
轉載于:https://www.cnblogs.com/lonelyxmas/p/3591132.html
總結
以上是生活随笔為你收集整理的C#中对于float,double,decimal的误解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 用twisted 问题 z
- 下一篇: jQuery validation插件的