C#的数据类型转换
1、我们知道任何⼀门编程语⾔均有相关数据类型。C#也不例外,其基本数据类型有int,short,long,float,double,string等。数据类型之间可以相互转换。不过转换过程要注意⼩类型能转换成⼤类型,但⼤类型⼀般不能转换成⼩类型。如int型可以转换成float型,但float型不⼀定可以转换成int型,⾄少这在C,C++是这样,但在C#中明显有了改变,似乎微软公司也允许这样的形式存在了。例如:
double dbl_num=12345678910.456;
int k = (int) dbl_num ;//此处运⽤了强制转换
以上代码如果在C,C++中强制转换成int型,肯定会出错,但现在在C#中却不会出错了,不过转换后的值往往是溢出值,是不精通的。这点需要⼤家注意。
2、⽤另⼀种⽅式转换类型,如int.parse(),int32.parse()等采⽤⽅法来转换.
如string str=”100″;
int i=int.Parse(str);
注意:str除掉引号的类型必须和*.Parse的类型⼀致。如果将100改成100.78,即变成float类型,运⾏时将会报错”输⼊字符串的格式不正确.”
3、⽤后缀式转换,如k.toString(),⼀般运⽤于字符串或⽇期等其它类型
int i=100;
string s=i.ToString();
4、采⽤Convert类来实现转换,该类基本⽀持所以类型之间的转换
string str=”100″;
int i = Convert.ToInt16(str);
注意:str除掉引号的类型必须和Convert.*的类型⼀致。如果将100改成100.78,即变成float类型,运⾏时将会报错”输⼊字符串的格式不正确.”
下⾯做⼀个深⼊的认识:
1、隐式转换(⾃动转换):由于该转换是⼀种安全类型的转换,不会导致数据丢失,因此不需要任何
特殊的语法。例如,从较⼩整数类型到较⼤整数类型的转换以及从派⽣类到基类的转换都是这样的转换。
对于内置数值类型,如果要存储的值⽆需截断或四舍五⼊即可适应变量,则可以进⾏隐式转换。例如,long 类型的变量(8 字节整数)能够存储 int(在 32 位计算机上为 4 字节)可存储的任何值。在下⾯的⽰例中,编译器先将右侧的值隐式转换为 long 类型,再将它赋给 bigNum。
例:
C#
// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;
2、显式转换(强制转换):显式转换需要强制转换运算符。在转换中可能丢失信息时或在出于其他原
因转换可能不成功时,必须进⾏强制转换。典型的例⼦包括从数值到精度较低或范围较⼩的类型的转换和从基类实例到派⽣类的转换。
但是,如果进⾏转换可能会导致信息丢失,则编译器会要求执⾏显式转换,显式转换也称为“强制转换”。强制转换是显式通知编译器您打算进⾏转换且您知道可能会发⽣数据丢失的⼀种⽅式。若要执⾏强制转换,请在要转换的值或变量前⾯的圆括号中指定要强制转换到的类型。下⾯的程序将强制转换为。如不强制转换则该程序不会进⾏编译。
例:
C#
class Test
{
static void Main()
{
double x = 1234.7;
int a;
// Cast double to int.
a = (int)x;
System.Console.WriteLine(a);
}
}
// Output: 1234
(1)(int)变量名[强制类型转换]:
该转换⽅式主要⽤于数字类型转换,从int类型到long,float,double,decimal类型,可以使⽤隐式转换,但是从long类型到int类型就需要使⽤显式转换,也就是该数据类型转换⽅式,否则会产⽣编译错误。
writeline输出数值变量该⽅式对于浮点数会做⽆条件舍去,失去精确度
当然,该⽅式也可以进⾏object到int得转换,但是,object的值要赋予int类型的值,否则会产⽣编译错误,⽽且object为null时也会出错。
最后切忌的⼀点,千万不要⽤来处理char类型到int类型的转换,否则传回的的值是ASCII代码,⽽并不是你想要的值。
(2)int.Parse(string类型变量名)
该⽅式是将数字内容的字符串转为int类型,如果字符串内容为空或者null时,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出FormatException异常;如果字符串内容所表⽰数字超出int类型可表⽰的范围,则抛出OverflowException异常。
使⽤该⽅法切忌的⼀点就是只能处理字符串内容,⽽且字符串内容只能在int类型可表⽰的范围之内。
(3)int.TryParse(string s, out int result)
该⽅式也是将数字内容的字符串转为int类型,但是该⽅式⽐int.Parse优越的地⽅,就是它不会出现异常。如果转换成功返回 true,如果转换失败返回 false。很明显,最后⼀个参数为输出值,如果转换失败,输出值为 0;如果转换成功,则输出相应的值。
(4)Convert.ToInt32
该⽅式不仅可以将字符串转为int类型,还可以将其它类型的值转成int类型。变量若为object或string类型,当其值为null时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,在转型成int时,仍会造成程序错误。
该⽅式对于浮点数会做四舍五⼊。
该⽅式同强制转换⼀样,不能⽤来处理char类型,否则传回的是ASCII代码。
3、⽤户定义的转换:可以定义⼀些特殊的⽅法来执⾏⽤户定义的转换,从⽽使不具有基类–派⽣类关系的⾃定义类型之间可以显式和隐式转换。
4、使⽤帮助程序类的转换:若要在不兼容的类型之间进⾏转换,例如在整数与 System.DateTime 对象之间转换,或者在⼗六进制字符串与字节数组之间转换,则可以使⽤System.BitConverter 类、System.Convert 类和内置数值类型的 Parse ⽅法,例如 Int32.Parse。
下⾯具体就C#中的⼏种强制转换⽅法做⼀下⽐较,(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别
1、(int)变量名[强制类型转换]:
该转换⽅式主要⽤于数字类型转换,从int类型到long,float,double,decimal类型,可以使⽤隐式转换,但是从long类型到int类型就需要使⽤显式转换,也就是该数据类型转换⽅式,否则会产⽣编译错误。
该⽅式对于浮点数会做⽆条件舍去,失去精确度
当然,该⽅式也可以进⾏object到int得转换,但是,object的值要赋予int类型的值,否则会产⽣编译错误,⽽且object为null时也会出错。
最后切忌的⼀点,千万不要⽤来处理char类型到int类型的转换,否则传回的的值是ASCII代码,⽽并不是你想要的值。
2、 int.Parse(string类型变量名)
该⽅式是将数字内容的字符串转为int类型,如果字符串内容为空或者null时,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出
FormatException异常;如果字符串内容所表⽰数字超出int类型可表⽰的范围,则抛出OverflowException异常。
使⽤该⽅法切忌的⼀点就是只能处理字符串内容,⽽且字符串内容只能在int类型可表⽰的范围之内。
3、int.TryParse(string s, out int result)
该⽅式也是将数字内容的字符串转为int类型,但是该⽅式⽐int.Parse优越的地⽅,就是它不会出现异常。如果转换成功返回 true,如果转换失败返
回 false。很明显,最后⼀个参数为输出值,如果转换失败,输出值为 0;如果转换成功,则输出相应的值。
例如:1.将字符串“12345”转换成数值数据12345,实现如下:
bool=ryParse("12345",int result);
bool=true;
result=12345; //成功
4、Convert.ToInt32
该⽅式不仅可以将字符串转为int类型,还可以将其它类型的值转成int类型。变量若为object或string类型,当其值为null时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,在转型成int时,仍会造成程序错误。
该⽅式对于浮点数会做四舍五⼊。
该⽅式同强制转换⼀样,不能⽤来处理char类型,否则传回的是ASCII代码。
该类的⽅法都是静态⽅法,可以通过“Convert.⽅法名(参数)”形式来使⽤,其中常⽤的⽅法如下表所⽰。
⽅法说明
Convert.ToBoolean(var)var转换为bool
Convert.ToChar(var)var转换为char
Convert.ToDecimal(var)var转换为decimal
Convert.ToDouble(var)var转换为double
Convert.ToInt32(var)var转换为int
Convert.ToString(var)var转换为string
例如:1.将字符串“12345”转换成数值数据12345,实现如下:
Convert.ToInt32("12345");
2.将⼩数型“
3.14”转换成整数型数据,实现如下:
Convert.ToInt32(3.14);
3.将字符型'true'转换成布尔型数据,实现如下:
Convert.ToInt32('true');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论