官术网_书友最值得收藏!

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ù)有效的形式。

主站蜘蛛池模板: 石狮市| 嵩明县| 中山市| 盐池县| 闽清县| 德江县| 呼和浩特市| 健康| 吉首市| 金沙县| 惠水县| 资兴市| 化隆| 闽清县| 涞水县| 霞浦县| 唐河县| 山东省| 宁远县| 大余县| 漳平市| 离岛区| 依兰县| 舞钢市| 平和县| 聂拉木县| 万源市| 清丰县| 苍山县| 东源县| 三亚市| 临泽县| 宝丰县| 肃南| 翁源县| 中方县| 阳江市| 万山特区| 东乡县| 凤翔县| 滦南县|