C#整數(shù)三種強(qiáng)制類型轉(zhuǎn)換int、Convert.ToInt32()、int.Parse()的用法和區(qū)別:
1、int適合簡單數(shù)據(jù)類型之間的轉(zhuǎn)換,C#的默認(rèn)整型是int32(不支持bool型);
2、int.Parse(string sParameter)是個(gè)構(gòu)造函數(shù),參數(shù)類型只支持string類型;
3、Convert.ToInt32()適合將Object類型轉(zhuǎn)換為int型;
4、Convert.ToInt32()和int.Parse()的細(xì)微差別:
對(duì)于空值(null)的處理不 同,Convert.ToInt32(null)會(huì)返回0而不會(huì)產(chǎn)生任何異常,但int.Parse(null)則 會(huì)產(chǎn)生異常。
例子,
string test="1234";
int num=Convert.ToInt32(test);
最終,num=1234.
但是,如果string為空字符串"",即string test="";
int num=Convert.ToInt32(test);
num=0嗎?
不是的。這個(gè)時(shí)候?qū)伋霎惓?。因此,解決的辦法就是:
int num=Convert.ToInt32("0"+test);
舉例來說:
假如從url中取一個(gè)參數(shù)page的值,我們知道這個(gè)值是一 個(gè)int,所以即可以用Convert.ToInt32(Request.QueryString["page"]),也可以 用int.Parse(Request.QueryString["page"]),但是如果page這個(gè)參數(shù)在url中不 存在,那么前者將返回0,0可能是一個(gè)有效的值,所以你不知道url中原來根本就沒有這個(gè)參數(shù)而繼續(xù)進(jìn)行下一步的處理,這就可能產(chǎn)生意想不到的效果;而用后 一種方法的話沒有page這個(gè)參數(shù)則會(huì)拋出異常,我們可以捕獲異常然后再做相應(yīng) 處理,比如提示用戶缺少參數(shù)等,而不是把參數(shù)值當(dāng)做0來處理。
5、再有一點(diǎn)區(qū)別是:
(1).Convert.ToInt32(double value) 如果 value 為兩個(gè)整數(shù)中間的數(shù)字,則返回二者中的偶數(shù);即 4.5 轉(zhuǎn)換為 4,而 5.5 轉(zhuǎn)換為 6;
(2). int(4.6) = 4,int轉(zhuǎn)化其他數(shù)值類型為int時(shí)沒有四舍五入,強(qiáng)制轉(zhuǎn)換(截取整數(shù)部分);
(3). int.Parse(4.5) 會(huì)直接報(bào)錯(cuò):"輸入字符串的格式不正確"。
int.Parse是轉(zhuǎn)換String為int;
Convert.ToInt32是轉(zhuǎn)換繼承自O(shè)bject的對(duì)象為int的; 你得到一個(gè)object對(duì)象,你想把它轉(zhuǎn)換為int,用int.Parse就不可以,要用 Convert.ToInt32.
總結(jié):
(1)Convert.ToInt32的參數(shù)比較多,Int.Parse只能轉(zhuǎn)換string類型的.
(2)Parse就是把String轉(zhuǎn)換成int,char,double....等,也就是*.Parse(string) 括號(hào)中的一定要是string.
(3)Convert可以提供多種類型的轉(zhuǎn)換,也就是Convert.*()括號(hào)中可以為很多種類 型(包括string).
Convert.ToInt32()和int.Parse()的區(qū)別
(1)Convert.ToInt32(null)會(huì)返回0而不會(huì)報(bào)異常,但int.Parse(null)則會(huì)產(chǎn)生異常
(2)Convert.ToInt32("")和int.Parse("")都會(huì)產(chǎn)生異常,兩個(gè)方法的參數(shù)不能為空字符串。
(3)
a. Convert.ToInt32(double value)
如果 value 為兩個(gè)整數(shù)中間的數(shù)字,則返回二者中的偶數(shù);即 3.5轉(zhuǎn)換為4,4.5 轉(zhuǎn)換為 4,而 5.5 轉(zhuǎn)換為 6。 不過4.6可以轉(zhuǎn)換為5,4.4轉(zhuǎn)換為4
b. int.Parse("4.5")
直接報(bào)錯(cuò):"輸入字符串的格式不正確".
c. int(4.6) = 4
Int轉(zhuǎn)化其他數(shù)值類型為Int時(shí)沒有四舍五入,強(qiáng)制轉(zhuǎn)換
Convert.ToInt32()的參數(shù)有很多個(gè),而int.Parse()的參數(shù)只能是string類型的。Parse就是把string轉(zhuǎn)換為int,double,char 等等。*.Parse(string)括號(hào)中一定要是string類型的。
看似結(jié)束了,其實(shí)呢,現(xiàn)在double值變?yōu)榱?.6789。結(jié)果是這樣的
難道它是傳說中的“四舍五入”?有可能。沒那么簡單、沒那么簡單。我把double值又改變了,是不是“四舍五入”呢,請(qǐng)看圖
哈哈,結(jié)果很明顯了。原來它如男人喜歡美女一樣,Convert.ToInt32喜歡偶數(shù)!誰又不是喜歡成雙入對(duì)呢?結(jié)論:四舍六入五湊偶
明顯上邊的代碼無法滿足需求了,怎么辦呢?據(jù)說轉(zhuǎn)換還可以這樣寫。
這次無論我怎么改變double的值,(int)d的結(jié)果就是小數(shù)點(diǎn)前面的值。直到我腦殘的做出了這個(gè)決定:
好吧,我又錯(cuò)了。結(jié)論:只要你的值不腦殘,結(jié)果還挺美好。
好偉大的需求阿。我出絕招了:
這次不會(huì)出現(xiàn)問題了吧。結(jié)論:不考慮性能的前提下,建議使用這變態(tài)方式。
如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇