Cast 和 Convert 的區別 c#
1. Cast是指同類型的轉換,例如數字類型互相轉換,int ->double
分為兩種
1.implicit : 從小轉成大
我們都知道int為32bit,而double為64bit,如果把int轉乘double,則沒有影響,因為double可以存int不會失去掉任何東西
int major = 5;
double i = major;
2.explicit : 從大轉成小
如果相反從double要轉成int,這時候就會發生漏失資訊的事情
double major = 5.55;
int i = major; //會提示說不能implicit轉換,只能用explicit轉換
因為會漏失資訊,上面的例子會把.55給遺失掉,只會得到5
如果是在需要比較精密的系統,財務系統之類的,漏掉這.55可能就不得了了
所以會提示要你自己來轉換,讓你自己知道這會造成遺漏
至於要如何explicit轉換呢?
請在要轉換的數字前面加上 括號裡面放要轉的型態 (int)
延續上面的例子
double major = 5.55;
int i = (int)major;
以上就不會報錯了
___________________________________________________________
2.Convert則為不同類型的轉換,例如把int轉換成string,其實也能支持同類型的轉換
如int轉成double,只支援小->大
如果你寫
int i =1;
string s = (string) i; //這時候會報錯 會提示不能夠把int轉換成string 不能像上面一樣強制轉換
double變int
這時候就需要用到Convert類別
他裡面有很多方法,可以進行各種轉換
int i = 1;
string s = Convert.ToString(i); //成功!~~~(灑花)
我們可以發現float轉換成int,其實可以用 cast 和 Convert方法
但這個前提是float的數字要比較小,如果他超越了int的最大值,則Convert方法會報錯
如下:
float f = 1555555555555555555555555F;
int i = Convert.ToInt32(f);
但以下這個卻可以成功轉換!
float f = 15555F;
int i = Convert.ToInt32(f);
而使用cast方法,如下,則不會報錯,但得到的結果會非常奇怪 ! 跟1555555555是完全不同的值
float f = 15555555555555F;
int i = (int)f;
分為兩種
1.implicit : 從小轉成大
我們都知道int為32bit,而double為64bit,如果把int轉乘double,則沒有影響,因為double可以存int不會失去掉任何東西
int major = 5;
double i = major;
2.explicit : 從大轉成小
如果相反從double要轉成int,這時候就會發生漏失資訊的事情
double major = 5.55;
int i = major; //會提示說不能implicit轉換,只能用explicit轉換
因為會漏失資訊,上面的例子會把.55給遺失掉,只會得到5
如果是在需要比較精密的系統,財務系統之類的,漏掉這.55可能就不得了了
所以會提示要你自己來轉換,讓你自己知道這會造成遺漏
至於要如何explicit轉換呢?
請在要轉換的數字前面加上 括號裡面放要轉的型態 (int)
延續上面的例子
double major = 5.55;
int i = (int)major;
以上就不會報錯了
___________________________________________________________
2.Convert則為不同類型的轉換,例如把int轉換成string,其實也能支持同類型的轉換
如int轉成double,只支援小->大
如果你寫
int i =1;
string s = (string) i; //這時候會報錯 會提示不能夠把int轉換成string 不能像上面一樣強制轉換
double變int
這時候就需要用到Convert類別
他裡面有很多方法,可以進行各種轉換
int i = 1;
string s = Convert.ToString(i); //成功!~~~(灑花)
我們可以發現float轉換成int,其實可以用 cast 和 Convert方法
但這個前提是float的數字要比較小,如果他超越了int的最大值,則Convert方法會報錯
如下:
float f = 1555555555555555555555555F;
int i = Convert.ToInt32(f);
但以下這個卻可以成功轉換!
float f = 15555F;
int i = Convert.ToInt32(f);
而使用cast方法,如下,則不會報錯,但得到的結果會非常奇怪 ! 跟1555555555是完全不同的值
float f = 15555555555555F;
int i = (int)f;
留言
張貼留言