ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**显式类型转换**\- 显式类型转换,即**强制类型转换**。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。 下表显示没有[隐式转换](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table)的 .NET 数值类型之间的预定义显式转换。 | From | 到 | | --- | --- | | [sbyte](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `byte`、`ushort`、`uint`、`ulong`或`char` | | [byte](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`或`char` | | [short](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`ushort`、`uint`、`ulong`或`char` | | [ushort](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`short`或`char` | | [int](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`uint`、`ulong`或`char` | | [uint](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`或`char` | | [long](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`、`uint`、`ulong`或`char` | | [ulong](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`、`uint`、`long`或`char` | | [char](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/char) | `sbyte`、`byte`或`short` | | [float](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`、`uint`、`long`、`ulong`、`char`或`decimal` | | [double](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`、`uint`、`long`、`ulong`、`char`、`float`或`decimal` | | [decimal](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types) | `sbyte`、`byte`、`short`、`ushort`、`int`、`uint`、`long`、`ulong`、`char`、`float`或`double` | 例子: ``` double x=198410927.0112; int y=(int)x; //结果 198410927 ``` ## 备注 * 显式数值转换可能会导致精度降低或导致引发异常,通常为[OverflowException](https://docs.microsoft.com/zh-cn/dotnet/api/system.overflowexception)。 * 将整数类型的值转换为另一个整数类型时,结果取决于溢出[检查上下文](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/checked-and-unchecked)。在已检查的上下文中,如果源值在目标类型的范围内,则转换成功。否则会引发[OverflowException](https://docs.microsoft.com/zh-cn/dotnet/api/system.overflowexception)。在未检查的上下文中,转换始终成功,并按如下方式进行: * 如果源类型大于目标类型,则通过放弃其“额外”最高有效位来截断源值。结果会被视为目标类型的值。 * 如果源类型小于目标类型,则源值是符号扩展或零扩展,以使其与目标类型的大小相同。如果源类型带符号,则是符号扩展;如果源类型是无符号的,则是零扩展。结果会被视为目标类型的值。 * 如果源类型与目标类型的大小相同,则源值将被视为目标类型的值。 * 将`decimal`值转换为整型类型时,此值会向零舍入到最接近的整数值。如果生成的整数值处于目标类型的范围之外,则会引发[OverflowException](https://docs.microsoft.com/zh-cn/dotnet/api/system.overflowexception)。 * 将`double`或`float`值转换为整型类型时,此值会向零舍入到最接近的整数值。如果生成的整数值处于目标类型范围之外,则结果会取决于溢出[上下文](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/checked-and-unchecked)。在已检查的上下文中,引发[OverflowException](https://docs.microsoft.com/zh-cn/dotnet/api/system.overflowexception);而在未检查的上下文中,结果是目标类型的未指定值。 * 将`double`转换为`float`时,`double`值舍入为最接近的`float`值。如果`double`值太小或太大,无法匹配目标类型,结果将为零或无穷大。 * 将`float`或`double`转换为`decimal`时,源值转换为`decimal`表示形式,并并五入到第 28 位小数后最接近的数(如果需要)。根据源值的值,可能出现以下结果之一: * 如果源值太小,无法表示为`decimal`,结果则为零。 * 如果源值为 NaN(非数值)、无穷大或太大而无法表示为`decimal`,则引发[OverflowException](https://docs.microsoft.com/zh-cn/dotnet/api/system.overflowexception)。 * 将`decimal`转换为`float`或`double`时,`decimal`值舍入到最接近的`double`或`float`值。