【C#基础详解】(六)类型转换

6.1隐式类型转换

要求等号两边参与运算的操作数的类型必须一致,如果不一致,满足下列条件会发生自动类型转换,或者称之为隐式类型转换。

要求:两种类型兼容,目标类型大于原类型

例如:int和double兼容(都是数字类型)

例如:double>int(小的转大的)

6.2显示类型转换

两种类型相兼容int-->double

大的转成小的double-->int

语法:

目标类型 变量名 = (目标类型)原数值

显式类型转换示例:

static void Main(string[] args)
{
    double d = 5673.74;
    int i;
    // 强制转换 double 为 int
    i = (int)d;
    Console.WriteLine(i);
    Console.ReadKey();    
}

输出结果:

5673

缺点:丢失精度,丢失数据

6.3强制类型转换

隐式类型转换和显示类型转换,都属于不安全的的类型转换,因为会出现数据丢失。所以C#中提供了两种方法:Parse方法、Convert方法。

6.3.1 Parse方法

Parse方法用于将字符串类型转换成任意基本类型,这里要求等号左、右两边的数据类型兼容,Parse作用是将字符串转换为对应的数据类型。

注意:

① 如果字符串内容为空或者null时,则抛出ArgumentNullException异常。

② 如果字符串内容不是数字,则抛出FormatException异常。

③ 如果字符串内容所表示数字超出指定的数据类型可表示的范围,则抛出OverflowException异常。

方法

说明

int.Parse(string value)

字符串类型转换成整数类型(int)

char.Parse(string value)

字符串类型转换成字符类型(char)

double.Parse(string value)

字符串类型转换成双精度浮点类型(double)

Single.Parse(string value)

字符串类型转换成单精度浮点类型(float)

int i = int.Parse(“111”);
i++;
Console.WriteLine(i);

输出结果:112

6.3.2 TryParse方法

TryParse方法也是将数字内容的字符串转为int类型,但是该方式比int.Parse优越的地方,就是它不会出现异常。

如果转换成功返回 true,如果转换失败返回 false。

很明显,最后一个参数为输出值,如果转换失败,输出值为 0;如果转换成功,则输出相应的值。

语法:int.TryParse(string s, out int result)

代码示例:

Console.Write("请输入int类型的整数:");
int result = 0;
bool b = int.TryParse(Console.ReadLine(),out result);
if(b)
{
    Console.WriteLine($"您输入的数字为{result}");
}
else
{
    Console.WriteLine("输入错误!");
}

6.3.3 Convert方法

如果两个变量的类型相兼容,可以使用自动类型转换或者强制类型转换,但是,如果两个类型的变量不兼容,比如string和int,这时候我们可以使用一个叫做Convert的转换工厂进行转换。

Convert方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。

注意:

① 使用Convert进行转换,也要满足一个条件:“面上要过得去”。

比如:string a= "123"/ 可以转成int或double

string b= "123abc"/ 不可以转成int或double

② 浮点数转换为int型数据后进行了四舍五入的计算。

③ 该方式不能用来处理char类型,否则会报异常。

C# 提供了下列内置的类型转换方法

方法

说明

Convert.ToInt32()

转换为整数类型(int)

Convert.ToChar()

转换为字符型(char)

Convert.ToDouble()

转换为双精度浮点型(double)

Convert.ToSingle()

转换为单精度浮点型(float)

Convert.ToString()

转换为字符串类型(string)

Convert.ToDateTime()

转换为日期类型(datetime)

把不同值的类型转换为字符串类型的代码实例
static void Main(string[] args)
{
    int i = 75;
    float f = 53.005f;
    double d = 2345.7652;
    bool b = true;
    Console.WriteLine(i.ToString());
    Console.WriteLine(f.ToString());
    Console.WriteLine(d.ToString());
    Console.WriteLine(b.ToString());
    Console.ReadKey();
}

输出结果:

75

53.005

2345.7652

True

6.3.4类型转换练习

交换变量练习

方法1:使用临时变量

将输入的字符串转化为int值 两种方法:①int.Parse(string s)和②Convert.ToInt32(string value)。定义一个临时变量temp,将x的值赋给temp,然后将y的值赋给x,然后将temp存放的x的值赋给y;(可以这样理解:相当与一个空杯子、一杯咖啡,一杯牛奶,将牛奶和咖啡交换)

Console.WriteLine("请输入两个整数x,y");
//使用 int.parse(string s) 将输入的字符串为int值 
int x = int.Parse(Console.ReadLine());
//使用Convert.ToInt32(string value)将输入的字符串转化为int值
int y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("x={0},y={1}", x, y);
int temp;//定义一个临时变量temp
temp = x;  //将x的值赋给temp
x = y;     //将y的值赋给x
y = temp;  //将temp存放的x的值赋给y
Console.WriteLine("x={0},y={1}",x,y);
COnsole.ReadKey();

方法2:使用加减法

将x+y的和的值赋给x(y的值不变)。x减去于原先y的值即为x的值,将这个得到的x的值赋给y。然后x减去上一步得到的y的值(实际上是原先x的值),就得到现在x的值(原先y的值)。

Console.WriteLine("输入两个整数x,y");
int x = int.Parse(Console.ReadLine());
int y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("x={0},y={1}", x, y);
x = x + y;  //将x+y的和的值赋给x
y = x - y;  //这个x-y等于x和y的和减去原先y的值剩余原先x的值
x = x - y;  //这个x-y等于x+y的和减去y的值(y在上一步已经变成原先x的值),剩余原先的y的值
Console.WriteLine("x={0},y={1}", x, y);
COnsole.ReadKey();
秒数转换器练习

提示用户输入一串数字,将这串数字转换为天时分秒

Console.WriteLine("请输入要计算的秒数:");
string inputSec = Console.ReadLine();
int seconds = Convert.ToInt32(inputSec);
//先转换有多少整数天,不足一天的转换有多少整数小时,不足一小时的转换有多少分钟,不足一分钟的剩余多少秒
int day = seconds / 86400;//天数
int hour = (seconds % 86400) / 3600;//秒数
int mins = (seconds % 86400) % 3600;//分钟
int min = mins / 60;//分钟
int sec = mins % 60;//秒数
Console.WriteLine($"计算后是{day}天:{hour}小时:{min}分钟:{sec}秒");
COnsole.ReadKey();
判断是否为闰年

两个条件:

1)年份能够被400整除:世纪闰年2000

2)年份能够被4整除但是不能够被100整除:普通闰年2004

Console.WriteLine("请输入年份,我来帮你判断是否为闰年");
int year = Convert.ToInt32(Console.ReadLine());
bool isRun = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
Console.WriteLine(isRun);
//逻辑或的优先级是低于逻辑与的优先级的
Console.ReadKey();

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值