C#类型转换

C#类型转换

隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。

显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

           double d = 10.1;
            int i;
            // 强制转换 double 为 int
            i = (int)d;
            //结果输出为10
            //因为强制转换则会丢失小数部分

1. 隐式类型转换

所谓隐式转换,就是系统默认的转换,其本质是小存储容量数据类型自动转换为大存储容量数据类型。有如下几种:
从sbyte类型到short,int,long,float,double,或decimal类型。

从byte类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型。

从short类型到int,long,float,double,或decimal类型。

从ushort类型到int,uint,long,ulong,float,double,或decimal类型。

从int类型到long,float,double,或decimal类型。

从uint类型到long,ulong,float,double,或decimal类型。

从long类型到float,double,或decimal类型。

从ulong类型到float,double,或decimal类型。

从char类型到ushort,int,uint,long,ulong,float,double,或decimal类型。

从float类型到double类型。

2.显式类型转换

显式类型转换,即强制类型转换。与隐式转换相反,而且强制转换会造成数据丢失。

从sbyte到byte,ushort,uint,ulong,或char。

从byte到sbyte或char。

从short到sbyte,byte,ushort,uint,ulong,或char。

从ushort到sbyte,byte,short,或char。

从int到sbyte,byte,short,ushort,uint,ulong,或char。

从uint到sbyte,byte,short,ushort,int,或char。

从long到sbyte,byte,short,ushort,int,uint,ulong,或char。

从ulong到sbyte,byte,short,ushort,int,uint,long,或char。

从char到sbyte,byte,或short。

从float到sbyte,byte,short,ushort,int,uint,long,ulong,char,或decimal。

从double到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或decimal。

从decimal到sbyte,byte,short,ushort,int,uint,long,ulong,char,float,或double。

当转换有丢失信息或导致异常抛出,转换按照下列规则进行:

对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个OverflowException异常。这种检测还与编译器中是否设定了checked选项有关。

对于从float,double,或decimal到整型的转换,源变量的值通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个OverflowException异常。

对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正
无穷或负无穷。如果原double值是Nan,则转换结果也是NaN。

对于从float或double到decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位(如果有必要的话)。如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷和NaN,则将抛出InvalidCastException异常。

对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。

作者:西北白杨树
来源:CSDN
原文:https://blog.csdn.net/yysyangyangyangshan/article/details/7494577
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值