一:隐式转换
自动转换:大范围装小范围;
同类型
有符号: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;
超出范围:整型→数据溢出;浮点数→精度丢失
强转的关键:被强转后的数据绝对可以存储在低精度范围中,只是会出现溢出或精度丢失
浮点转换为整型,不会四舍五入
Int可以强转为char,输出对应字母
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;
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
2899

被折叠的 条评论
为什么被折叠?



