**显式类型转换**\- 显式类型转换,即**强制类型转换**。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
下表显示没有[隐式转换](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`值。
- C#
- 基础 System
- 命名规范
- 变量
- 数据类型
- 值类型
- 简单类型
- 整数类型
- 字符类型
- 浮点类型
- 布尔类型
- 枚举类型
- 结构体类型
- 引用类型
- 类类型
- 对象(Object)类型
- 字符串(String)类型
- 方法属性
- 动态(Dynamic)类型
- 数组类型
- 接口Interface
- 委托类型delegate
- 装箱和拆箱
- 指针类型
- 值类型与引用类型的区别
- Var类型
- 类型转换
- 隐式转换
- 显式转换
- 常量
- 常用函数
- 流程控制
- 循环
- 跳转语句
- 数组
- 数组查找
- 添加组元素
- 复制与克隆数组
- 删除数组元素
- 数组排序与反转
- 数组排序
- 冒泡排序
- 直接插入排序
- 选择排序法
- 数组对象
- 哈希表
- 其他
- 递归
- 属性与方法及方法重载
- 结构与类
- 类
- 构造函数与析构函数
- 继承
- 多态
- 泛型
- demo
- 汉字字符(串)比较
- 创建指定大小文件与读取大文件
- 小截屏软件功能
- 子窗体返回主窗体
- 判断是否为数字
- 获得字符串实际长度(包括中文字符)
- unity
- script脚本
- 脚本的生命周期
- 调试
- Unity Manual5.4
- Unity手册
- Working In Unity
- Unity 2D
- Graphics(图形)
- Physics(物理系统)
- Scripting(脚本)
- Multiplayer and Networking(多玩家和联网)
- Audio(音频)
- Animation(动画)
- UI
- Navigation and Pathfinding(导航和寻路)
- Unity Services(Unity服务)
- Virtual Reality(虚拟现实VR)
- Open-source repositories(开源代码库)
- Platform-specific(特定于平台的信息)
- Legacy Topics(旧版主题)
- Expert Guides(专家指南)
- 重要的类
- Object
- GameObject(重要)
- Component
- Transform(重要)
- Rigidbody
- ParticleSystem
- Behaviour
- Camera
- Animator
- AudioSource
- Animation
- AudioListener
- Light
- MonoBehaviour事件行为(重要)
- Terrain
- Collider
- Renderer
- Texture
- Mesh
- material
- Time
- Prefab预制件
- 功能demo
- 层级未知查找子物体
- 查找hp最小的敌人
- 查找最近的敌人
- 小项目之英雄无敌
- 界面操作
- Scene窗口
- Game窗口
- project窗口
- Hierarchy窗口
- 动画
- Animation重要API
- 2D
- Sprite(creator) Sprite Renderer
- Sprite Editor
- Sprite Packer(遗留功能)
- 排序组组件
- 切片精灵
- 精灵遮罩
- 精灵图集
- Tilemap
- 2D物理系统
- 全局设置(Project setting)
- 2D刚体(Rigidbody 2D)
- 碰撞(事件)消息
- 2D碰撞体(Collider 2D)
- 2D圆形碰撞体(Circle Collider 2D)
- 2D盒型碰撞体(BoxCollider 2D)
- 2D多边形碰撞体( Polygon Collider 2D)
- 2D边界碰撞体(EdgeCollider 2D)
- 2D胶囊碰撞体(CapsuleCollider 2D)
- 2D复合碰撞体(Composite Collider 2D)
- 2D物理材质(摩擦和弹性)(Physics Material 2D)
- 2D关节
- 2D距离关节(Distance Joint 2D)
- 2D固定关节(Fixed Joint 2D)
- 2D摩擦关节(Friction Joint 2D)
- 2D铰链关节(Hinge Joint 2D)
- 2D相对关节(Relative Joint 2D)
- 2D滑动关节(Slider Joint 2D)
- 2D弹簧关节(Spring Joint 2D)
- 2D目标关节(Target Joint 2D)
- 2D车轮关节(Wheel Joint 2D)
- 2D恒定力(Constant Force 2D)
- 2D 效应
- 2D区域效应(AreaEffector 2D)
- 2D浮力效应(BuoyancyEffector 2D)
- 2D点效应(PointEffector 2D)
- 2D平台效应(PlatformEffector 2D)
- 2D表面效应(SurfaceEffector 2D)
- 精灵动画
- 2D动画事件
- 重要类
- rigidbody2d
- 小窍门
- Unity中如何查找脚本挂载在哪个物体上