C#入门-隐式转换、显式转换

一:隐式转换

自动转换:大范围装小范围;

同类型

有符号:long → int → short → sbyte

无符号:ulong → uint → ushort → byte

浮点数:double → float。decimal无法隐式存储 double和float

特殊类型

bool、char、string 之间不存在隐式转换

char可以存储整型。 整型也可以存储char。

        原理:ASCII码(字符和数字的对应关系 :0→48 A→65 a→97)

        short、byte等范围小于int的类型不能存储char

无符号 & 有符号

无符号 存储 有符号; 不可以

有符号 存储 无符号; 可以(同类型且在一定范围内)如:int=ubyte;

浮点数 & 整型

整型 存储 浮点数; 不可以

浮点数 存储 所有整型(有符号、无符号); 可以

decimal 存储 所有整型(有符号、无符号); 可以

decimal不可隐式转为float、double → 保持数据的准确性和清晰性

decimal→用于金融和货币计算

        float:7位。double:15~17位。decimal:28位。→ 前两者会丢失精度,且丢失的很大

二:显式转换

易出现非法数据,后续可验证数据的合法性。C#编码规则强制开发者意识到数据精度的潜在变化

2.1 括号强转(数值类型)

适用:数值类型之间

注意范围和精度问题

sbyte、short、int、long;byte、ushort、uint、ulong;

int i; sbyte s=(sbyte) i;

  1. 超出范围:整型→数据溢出;浮点数→精度丢失

  2. 强转的关键:被强转后的数据绝对可以存储在低精度范围中,只是会出现溢出或精度丢失

  3. 浮点转换为整型,不会四舍五入

  4. Int可以强转为char,输出对应字母

  5. bool和string类型不能强制转为数值型

2.2 Parse法

字符串类型数据 -> 对应类型数据(数值类型、bool、char)

bool b1=bool.Parse("true");

转换需合法合规:1.对应的数据类型。2.不超出范围。

int i4=int.Parse("123"); 不报错

i4=int.Parse("12.33"); 报错->数据类型不对

short s3=short.Parse("400000"); 报错->超出范围

bool b1=bool.Parse("true");

char c1=char.Parse('A');

2.3 Convert法

各种类型 -> 各种类型

Convert.ToString();

注意:类型之间需能相互转换,即合法合规

特点:精度更准确

各种→数值

数值型:int a=Convert.ToInt32(1.1245f); 精度强于括号强转,会四舍五入

特殊类型:bool→数值,true=1,false=0;

int a=Convert.ToInt32(true); int a=Convert.ToInt32('A');

对应类型的Convert方法

2.4 .ToString

任意类型→字符串

作用:做拼接打印 .ToString();

实例:1.ToString; true.ToString; 'A'.ToString(); 

字符串拼接,会自动调用ToString。【字符串拼接有两种方法:+ 和 .Format()。均会调用ToString】

Console.WriteLine("123123"+1+true);

String s="123123"+1+true;

链接:C#入门-字符串的拼接、.Format()

ToString方法拓展

class b=new class(); b.ToString(); → 输出类的完整路径

当把对象当做字符串使用时,会被ToString

每个类中都有ToString方法,是∵每个类的基类Object中有ToString方法

重写ToString方法
public override string ToString()
{
    string result=age+":"+name;
    return result;
}

总结:

括号强转:数值→数值。 int i; sbyte s=(sbyte) i;

Parse:字符串→对应类型[数值、bool、char]。 int i4=int.Parse("123");

Convert:各种类型 → 各种类型

浮点型数据的截断、四舍五入的情况

截断:浮点转为整型。具体看输出情况

四舍五入:

int intValue = (int)Math.Round(doubleValue);

高精度浮点数 → 低精度浮点数:float转为double

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值