- C#實(shí)踐教程(第2版)
- 李乃文
- 1389字
- 2021-03-19 18:15:35
2.5 類型轉(zhuǎn)化
在數(shù)據(jù)類型中曾介紹,“5”、‘5’和5是3個(gè)不同的數(shù)據(jù)類型,其中,只有5能參與數(shù)據(jù)的數(shù)學(xué)運(yùn)算。編譯器編譯程序運(yùn)行時(shí)需要確切地知道數(shù)據(jù)類型,所以在實(shí)際開(kāi)發(fā)中,若需要將“5”和‘5’作為整型數(shù)據(jù)參與運(yùn)算,則需要將“5”和‘5’先改變數(shù)據(jù)類型,使其變成5,再進(jìn)行運(yùn)算。
本節(jié)介紹各個(gè)數(shù)據(jù)類型之間的轉(zhuǎn)換,包括基本數(shù)據(jù)類型間的顯式轉(zhuǎn)換和隱式轉(zhuǎn)換,以及字符串和基本數(shù)值類型之間的轉(zhuǎn)換。
2.5.1 隱式類型轉(zhuǎn)換
不需要進(jìn)行聲明的轉(zhuǎn)換就叫隱式類型轉(zhuǎn)換,換句話說(shuō),就是不需要縮小其存儲(chǔ)空間,并能直接轉(zhuǎn)換的,可以直接執(zhí)行運(yùn)算而不需要另外進(jìn)行轉(zhuǎn)換。
這樣的情況必須是將范圍小的類型轉(zhuǎn)換為范圍大的類型。如將int類型轉(zhuǎn)換為double、long、decimal或float類型,將long類型轉(zhuǎn)換為float或double類型等。如表2-6列出了隱式類型的轉(zhuǎn)換表。
表2-6 隱式類型轉(zhuǎn)換表

在表2-6中,從int、uint、long、ulong到float,以及從long或ulong到double的轉(zhuǎn)換可能會(huì)導(dǎo)致精度損失,但是不會(huì)影響它的數(shù)量級(jí),而且隱式轉(zhuǎn)換不會(huì)丟失任何信息。隱式轉(zhuǎn)換的使用,如練習(xí)2-4所示。
【練習(xí)2-4】
定義int類型的變量num1和num2,將兩個(gè)變量的值賦給double類型的變量并輸出。這兩個(gè)數(shù)的乘積是int類型,將乘積賦值給double類型的變量res,輸出res的值,使用代碼如下:
int num1 = 4; int num2 = 8; double dou1 = num1; double dou2 = num2; double res = num1 * num2; Console.WriteLine("dou1值為:{0}", dou1); Console.WriteLine("dou2值為:{0}", dou2); Console.WriteLine("res值為:{0}", res);
2.5.2 顯式類型轉(zhuǎn)換
顯式類型轉(zhuǎn)換也被稱作強(qiáng)制類型轉(zhuǎn)換,它需要在代碼中明確地聲明要轉(zhuǎn)換的類型。顯式類型轉(zhuǎn)換可以將取值范圍大的類型轉(zhuǎn)換為取值范圍小的類型。如表2-7列出了需要進(jìn)行顯式類型轉(zhuǎn)換的數(shù)據(jù)類型。
表2-7 顯式類型轉(zhuǎn)換表

C#中使用強(qiáng)制類型進(jìn)行轉(zhuǎn)換時(shí)有兩種方法:一種是使用括號(hào)(),在括號(hào)()中給出數(shù)據(jù)類型標(biāo)識(shí)符(即強(qiáng)制轉(zhuǎn)換的類型),在括號(hào)外要緊跟轉(zhuǎn)換的表達(dá)式;另一種是使用Convert關(guān)鍵字進(jìn)行數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,如練習(xí)2-5所示。
【練習(xí)2-5】
將double類型的變量轉(zhuǎn)化為float類型和int類型,如定義雙精度的變量dou值為15.123456,分別轉(zhuǎn)化float類型和int類型,輸出原值和轉(zhuǎn)化后的值,代碼如下:
double dou = 15.1234567; float flo = (float)dou; int intnum=(int)dou; Console.WriteLine("雙精度:{0}", dou); Console.WriteLine("浮點(diǎn)數(shù):{0}",flo ); Console.WriteLine("整型值:{0}", intnum);
運(yùn)行上述代碼,其結(jié)果如圖2-6所示。雙精度數(shù)據(jù)的值被四舍五入,原值被強(qiáng)制改變。若是將float類型和int類型轉(zhuǎn)化為double類型,則可以直接使用隱式轉(zhuǎn)化,而不需要考慮數(shù)據(jù)值的變化。

圖2-6 顯式類型轉(zhuǎn)化
2.5.3 字符串類型的轉(zhuǎn)換
顯式類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換主要是對(duì)數(shù)值之間的轉(zhuǎn)換,本節(jié)介紹將字符串轉(zhuǎn)化為int、double或float類型。
字符串類型轉(zhuǎn)換為其他類型時(shí)有兩種方法:一種是使用parse()方法;另外一種是使用Conver類中的方法進(jìn)行轉(zhuǎn)換。如表2-8列出了Convert類的常用轉(zhuǎn)換方法。
表2-8 Convert類的常用轉(zhuǎn)換方法

在字符串轉(zhuǎn)化中,最常用的是字符串和數(shù)學(xué)數(shù)據(jù)之間的轉(zhuǎn)化。如將字符串轉(zhuǎn)化為能夠執(zhí)行數(shù)學(xué)運(yùn)算的數(shù)據(jù),參與到數(shù)學(xué)運(yùn)算中,如練習(xí)2-6所示。
【練習(xí)2-6】
定義字符串類型的兩個(gè)值,分別使用字符串類型相加、將它們轉(zhuǎn)化為整型數(shù)據(jù)相加,輸出相加的結(jié)果,代碼如下:
static void Main(string[] args) { string num1 = "100"; string num2 = "67"; string nums = num1 + num2; int numi = Convert.ToInt32(num1) + Convert.ToInt32(num2); Console.WriteLine("兩個(gè)字符串的和:{0}",nums); Console.WriteLine("兩個(gè)整型數(shù)的和:{0}", numi); Console.Read(); }
運(yùn)行結(jié)果如下所示:
兩個(gè)字符串的和:10067 兩個(gè)整型數(shù)的和:167
由上述結(jié)果可以看出,作為字符串類型時(shí),兩個(gè)變量的相加結(jié)果,相當(dāng)于將兩個(gè)字符串中的字符組合在一起,而轉(zhuǎn)化為整型后,其相加結(jié)果為數(shù)學(xué)運(yùn)算中的相加。
注意
將字符串轉(zhuǎn)換為其他類型時(shí)該字符串必須是數(shù)字的有效表示形式。例如,用戶可以把字符串“32”轉(zhuǎn)換為int類型,卻不能將字符串“name”轉(zhuǎn)換為整數(shù),因?yàn)樗皇钦麛?shù)有效的形式。
- 觸·心:DT時(shí)代的大數(shù)據(jù)精準(zhǔn)營(yíng)銷
- Docker進(jìn)階與實(shí)戰(zhàn)
- jQuery EasyUI網(wǎng)站開(kāi)發(fā)實(shí)戰(zhàn)
- 樂(lè)學(xué)Web編程:網(wǎng)站制作不神秘
- Python Game Programming By Example
- Learning Bayesian Models with R
- BeagleBone Media Center
- Mastering RStudio:Develop,Communicate,and Collaborate with R
- 蘋(píng)果的產(chǎn)品設(shè)計(jì)之道:創(chuàng)建優(yōu)秀產(chǎn)品、服務(wù)和用戶體驗(yàn)的七個(gè)原則
- Geospatial Development By Example with Python
- Apache Camel Developer's Cookbook
- 運(yùn)維前線:一線運(yùn)維專家的運(yùn)維方法、技巧與實(shí)踐
- Android開(kāi)發(fā)進(jìn)階實(shí)戰(zhàn):拓展與提升
- Java Web應(yīng)用開(kāi)發(fā)
- Django 2.0 入門(mén)與實(shí)踐