int类型是几种基本的数据类型之一,在项目开发中我们经常需要将其它数据类型转为int类型使用。
我们经常会看见如下三种其他类型转为int类型的方式:
int num1 = (int)num;
int num2 = int.Parse(strNum);
int num3 = Convert.ToInt32(strNum);
那着三种转换方式之间有哪些不同呢?今天我们一起来看看。(这里,值本身不为数值的数据如“老王”,“AA”等本身不可转为int类型数据的情况不在下文提及)。我们分别通过object,float,double,string四种类型转换为int类型来看看转换后的值有什么变化
方式一:(int)
- object
object 的值为一个整数
object num2 = 9;
int intNum2 = (int)num2;
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
object的值为一个小数
object num3 = 9.1;
int intNum3 = (int)num3;
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
无语法错误,但执行报错
object的值为一个字符串
object num7 = "9";//整数字符串
int intNum7 = (int)num7;
Console.WriteLine($"{num7}被经过转换后值为{intNum7}");
与,小数一样,编译不报错,但是运行报错。
- float
代码:
float num2 = 9;
int intNum2 = (int)num2;
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
float num3 =9.1F;
int intNum3 = (int)num3;
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
float num4 = 9.5F;
int intNum4 = (int)num4;
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
float num5 = 9.6F;
int intNum5 = (int)num5;
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
float num6 = 8.6F;
int intNum6 = (int)num6;
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
执行效果:
- double
- 代码
double num2 = 9;
int intNum2 = (int)num2;
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
double num3 =9.1;
int intNum3 = (int)num3;
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
double num4 = 9.5;
int intNum4 = (int)num4;
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
double num5 = 9.6;
int intNum5 = (int)num5;
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
double num6 = 8.6;
int intNum6 = (int)num6;
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
- 执行效果
- string----语法错误——编写即报错
方式二:parse()
F12查看int.parse(),不难发现,parse方法只允许传递string类型的数据进行数据转换。
parse()方法进行数据类型转换 string->int
代码:
string num2 = "9";
int intNum2 = int.Parse(num2);
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
string num3 ="9.1";
int intNum3 = int.Parse(num3);
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
string num4 = "9.5";
int intNum4 = int.Parse(num4);
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
string num5 = "9.6";
int intNum5 = int.Parse(num5);
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
string num6 = "8.6";
int intNum6 = int.Parse(num6);
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
执行效果:
执行到对9.1等非整形的数值的字符串进行转换的时候会报错,
int.parse():只可以对整形熟知的字符串进行转换。
方式三:Convert.ToInt32()
- object
代码:
//object---数值(int,float,double,decimal)
object num2 = 9;
int intNum2 = Convert.ToInt32(num2);
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
object num3 = 9.1;
int intNum3 = Convert.ToInt32(num3);
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
object num4 = 9.5;
int intNum4 = Convert.ToInt32(num4);
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
object num5 = 9.6;
int intNum5 = Convert.ToInt32(num5);
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
object num6 = 8.6;
int intNum6 = Convert.ToInt32(num6);
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
object num7 = 8.5;
int intNum7 = Convert.ToInt32(num7);
Console.WriteLine($"{num7}被经过转换后值为{intNum7}");
//object---字符串(内容为数字的字符串)
object num8 = "9";//整数字符串
int intNum8 = Convert.ToInt32(num8);
Console.WriteLine($"字符串{num8}被经过转换后值为{intNum8}");
object num10 = "9.1";//小数字符串
int intNum10 = Convert.ToInt32(num10);
Console.WriteLine($"字符串{num10}被经过转换后值为{intNum10}");//这转换会出错
执行结果:
- float
代码:
float num2 = 9;
int intNum2 = Convert.ToInt32(num2);
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
float num3 = 9.1F;
int intNum3 = Convert.ToInt32(num3);
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
float num4 = 9.5F;
int intNum4 = Convert.ToInt32(num4);
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
float num5 = 9.6F;
int intNum5 = Convert.ToInt32(num5);
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
float num6 = 8.5F;
int intNum6 = Convert.ToInt32(num6);
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
执行结果:
- double
代码:
double num2 = 9;
int intNum2 = Convert.ToInt32(num2);
Console.WriteLine($"{num2}被经过转换后值为{intNum2}");
double num3 = 9.1;
int intNum3 = Convert.ToInt32(num3);
Console.WriteLine($"{num3}被经过转换后值为{intNum3}");
double num4 = 9.5;
int intNum4 = Convert.ToInt32(num4);
Console.WriteLine($"{num4}被经过转换后值为{intNum4}");
double num5 = 9.6;
int intNum5 = Convert.ToInt32(num5);
Console.WriteLine($"{num5}被经过转换后值为{intNum5}");
double num6 = 8.5;
int intNum6 = Convert.ToInt32(num6);
Console.WriteLine($"{num6}被经过转换后值为{intNum6}");
执行结果:
- string
代码:
string num2 = "9";
int intNum2 = Convert.ToInt32(num2);
Console.WriteLine($"字符串{num2}被经过转换后值为{intNum2}");
string num3 = "9.1";
int intNum3 = Convert.ToInt32(num3);
Console.WriteLine($"字符串{num3}被经过转换后值为{intNum3}");//执行会报错
执行结果:
要看仔细了哦,里面有彩蛋哦,仔细观察,9.5和8.5的转换结果哦。
总结:三种转换方式的特点如下
方式 | object | float | double | string |
(int) | 只可以转换整数值 | 保留整数(不四舍五入) | 保留整数(不四舍五入) | |
int.Parse() | string的值内容必须为整数值,小数会报错 | |||
Convert.ToInt32() | 如果object为数值,则四舍五入且如果第一位小数为5,整数位为奇数则向上取整,如果为偶数则向下取整。如果为字符串,则字符串内容必须为整数值 | 四舍五入且如果第一位小数为5,整数位为奇数则向上取整,如果为偶数则向下取整。 | 四舍五入且如果第一位小数为5,整数位为奇数则向上取整,如果为偶数则向下取整。 | 如果字符串内容必须为整数值 |