4.2.1 显式数值转换
显式数值转换是指当不存在相应的隐式转换时,从一种数字类型到另一种数字类型的转换,包括:
从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。
显式转换有可能丢失信息或导致异常抛出。转换按照下列规则进行:
(1)对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功;否则抛出一个OverflowException异常,这种检测还与编译器中是否设定了checked选项有关。
(2)对于从float、double、decimal到整型的转换,源变量的值通过舍入将得到的最接近的整型值作为转换的结果,如果这个整型值超出了目标类型的值域,则将抛出一个Over-flowException异常。
(3)对于从double到float的转换,double值通过舍入取最接近的float值,如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正无穷或负无穷;如果原double值是NaN(值不确定),则转换结果也是NaN。
(4)对于从float、double到decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位,如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷及NaN,则将抛出InvalidCastException异常。
(5)对于从decimal到float、double的转换,小数的值通过舍入取最接近的值,这种转换可能会丢失精度,但不会引起异常。
【程序清单4-6】
这个例子把一个int类型转换成为long类型,程序的输出如图4-4所示。
图4-4 不同类型数据转换的结果
这是因为发生了溢出,从而在显式类型转换时导致信息丢失。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。