首页 百科知识 显式数值转换

显式数值转换

时间:2023-10-19 百科知识 版权反馈
【摘要】:对于从float、double、decimal到整型的转换,源变量的值通过舍入将得到的最接近的整型值作为转换的结果,如果这个整型值超出了目标类型的值域,则将抛出一个Over-flowException异常。对于从double到float的转换,double值通过舍入取最接近的float值,如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正无穷或负无穷;如果原double值是NaN,则转换结果也是NaN。对于从decimal到float、double的转换,小数的值通过舍入取最接近的值,这种转换可能会丢失精度,但不会引起异常。

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】

img56

这个例子把一个int类型转换成为long类型,程序的输出如图4-4所示。

img57

图4-4 不同类型数据转换的结果

这是因为发生了溢出,从而在显式类型转换时导致信息丢失。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈