C#数值转换-显式数值转换表(参考)
发布时间:2023-05-26 22:26:15
什么是显式转换
Explicit Conversion
就是在将一种类型转换成另外一种类型时,需要额外的代码来完成这种转换。
int n = 1;
byte b = (byte)n; // 正确,显式转换
byte b2 = n; // 错误
显式转换需要注意,它的结果不一定是我们想要的。
int n = 256;
byte b = (byte)n; // 结果是 0
上面的结果是 0,因为超过 255 了,它就从 0 开始;
如果 n 是 257,那么 b 就是 1;
如果 n 是 258,那么 b 就是 2;
……
由此还得说下 Convert,Convert 这个类用来转换类型,它有很多方法,比如 ToInt32,就是转换成 int。它涉及的类型跨度很大,比如可将 object、string 等转换成 int,而 (int) 则只能将数字类型转换成 int。
更多相关内容,请参见 Convert、Parse、TryParse、(int) 的区别。
显式数值转换表(摘自 MSDN)
从 | 到 |
---|---|
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 |
备注(摘自 MSDN)
显式数值转换可能导致精度损失或引发异常。
将 decimal 值转换为整型时,该值将舍入为与零最接近的整数值。如果结果整数值超出目标类型的范围,则会引发 OverflowException。
将 double 或 float 值转换为整型时,值会被截断。如果该结果整数值超出了目标值的范围,其结果将取决于溢出检查上下文。在 checked 上下文中,将引发 OverflowException;而在 unchecked 上下文中,结果将是一个未指定的目标类型的值。
将 double 转换为 float 时,double 值将舍入为最接近的 float 值。如果 double 值因过小或过大而使目标类型无法容纳它,则结果将为零或无穷大。
将 float 或 double 转换为 decimal 时,源值将转换为 decimal 表示形式,并舍入为第 28 个小数位之后最接近的数(如果需要)。根据源值的不同,可能产生以下结果:
如果源值因过小而无法表示为 decimal,那么结果将为零。
如果源值为 NaN(非数字值)、无穷大或因过大而无法表示为 decimal,则会引发 OverflowException。
将 decimal 转换为 float 或 double 时,decimal 值将舍入为最接近的 double 或 float 值。
猜你喜欢
- 背景公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服
- 前言前面我们已经分析Dubbo SPI相关的源码,看过的小伙伴相信已经知晓整个加载过程,我们也留下两个问题,今天我们先来处理下其中关于注解A
- 归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序
- 0x01 创建要转换的类和主函数注意这里一定要实现序列化package day1; import java.io.Serializable;
- java中初始化MediaRecorder实现代码:private boolean initializeVideo() { &
- 部署到webapps目录启动本文使用的Spring版本为Spring6,SpringBoot版本为3,JDK为17,可能会和之前有细微不同,
- 前言sql注入是web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操作,甚
- 机器学习 机器学习的目的是把数据转换成信息。 机器学习通过从数据里提取规则或模式来把数据转成信息。 人脸识别 人脸识别通过级联分类器对特征的
- 我们知道Android手机操作系统采用的是Linux内核,Linux中最高的系统权限就是Root,这就类似与Windows中的Adminis
- 在谈 Volatile 之前,我们先回顾下 Java 内存模型 的三要素:原子性、可见性、有序性,也就是大家常提到的并发编程三要素。并发编程
- 写在前面:使用springboot作为web框架,方便开发许多,做分布式开发,dubbo又不可少,那么怎么整合在一起呢,跟我学一遍,至少会用
- 基于Java swing+MySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家。(由于篇幅原
- Mybatis事务管理我们可以在mybatis-config.xml中配置事务管理器的实现<transactionManager ty
- 下面是我做C#第一个项目的过程:1.首先打开VS,这里我用的是VS2022预览版,鼠标双击打开VS;图一2.打开VS后会出现下面的页面,鼠标
- 如何调试Java程序?大家最开始学习Java,都会觉得IDE调试好高端有木有,其实很简单了。下文会尽量简单直观的教会你在Eclipse中调试
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- 1.监听(Listener)<!-- 配置监听 --><listener><listener-class>
- Java中避免NullPointerException的方法总结在字符串常量上调用equals// good"string lit
- 最近在做报表统计方面的需求,涉及到行转列报表。根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列。期间遇到几
- 前言:项目中我们经常会遇到有时候需要等待其他线程完成任务后,主线程才能执行其他任务,那么我们将如何实现呢?Join 解决方案join 的工作