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