在C#中进行类型转换 .
一、简单的数值类型转换
在JAVA中,我们知道存在两种转换形式,自动类型转换和强制类型转换,在C#中,我们可以把这两种类型转换称之为隐式类型
转换和显式类型转换。转换的方法和JAVA中一样。
1.隐式类型转换
对于数值类型,类型A的取值范围只要完全包含在类型B中,那么类型A就可以隐式转换为类型B
例如整型数值(int)A就可以隐式转换为浮点型(double).
2.显式类型转换
与隐式转换相反,只要把取值范围大的转换为取值范围小的,就需要用到显式类型转换。
double score = 85.5;
int add = 2;
int finalScore = (int)score + add;
以上这两种转换方式主要适用于数值类型之间的转换。
强制类型转换 强制类型转换
当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
、显式强制类型转换
显式强制类型转换需要使用强制类型转换运算符,格式如下:
(<expression>)
或
(type)<expression>
其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变。
、隐式强制类型转换
隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量。在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如:
;
;
;//执行本句后,nVar的值为3,而dVar的值仍是3.88
1,若已知x,y为double类型,则表达式:x=1,y=x+3/2结果是多少啊?
因为x,y都是double型,所以执行了y=x+3/2这个语句后,会输出小树部分,double型默认的是小数点后几位我忘了,你自己调试下,就会明白了!
二、数值类型与字符串之间的转换
上一种方式主要适用于数值类型之间的转换。
那么数值类型与字符串类型之间怎么转换呢?
1.字符串转换为数值型
在C#基础课程中,我们知道了从控制台接受数值类型的方法如下:
int score = int.parse(Console.ReadLine());
当我们要把字符串转换为数值类型时,可以使用Parse()方法。不同的数值类型都有自己的Parse()方法。
字符串转换为整型
int.Parse(string);
字符串转换为单精度浮点型
float.Parse(string);
字符串转换为双精度浮点型
double.Parse(string);
注意:要转换的字符串必须是数字的有效表达式。
2.数值型转换为字符串
将数值类型转换为字符串需要使用到ToString()方法
int age = 20;
string myAge = age.ToString();
三、使用Convert类进行类型转换
上面的Parse()方法是用来将字符串类型转换类数值类型的,我们再来认识一个更厉害的--Convert类,它能够在基本类型之间相互转换。Convert类为每一种都提供了一个静态方法。
Convert.ToInt32(); //转换为整型
Convert.ToSingle(); //转换为单精度浮点型
Convert.ToDouble(); //转换为双精度浮点型
Convert.ToString(); //转换为字符串类型
Convert类为每种类型转换都提供了一个静态方法,所以可以直接通过类型.方法名调用。
举个例子:
Code:
01.Class Demo
02.{
03. static void Main(string [] args)
04. {
05. double score = 85.6;
06. int myInt;
07. float myFloat;
08. string myString;
09.
10. Console.WriteLine("原始类型为double:{0}",score);
11.
12. myInt = Convert.ToInt32(score);
13. myFloat = Convert.ToSingle(score);
14. myString = Convert.ToString(score);
15.
16. Console.WriteLine("转换后:");
17.
18. Console.WriteLine("int /t float /t string");
19.
20. Console.WriteLine("{0}/t{1}/t{2}",myInt,myFloat,myString);
21. }
22.}
运行结果:
int float string
86 85.6 85.6
值得注意的是在前面显式类型转换时,将double类型显式转换为int类型时,结果是85,而用Convert类进行转换时,结果却是86。结论是利用显式类型转换时,将忽略小数位,就相当于利用SQL中的函数floor()效果一样。而利用Convert类进行转换是,将采用四舍五入的方法。