C#数值转换-显式数值转换表(参考)

什么是显式转换

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 值。

(0)

相关推荐

  • C#基础之数据类型转换

    int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x); 输出结果: 我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807:int类型的是:-2147483648~+2147483647 上面的代码中,由于long变量的值超过了int能容纳的最大值,造成了数据的丢失:像这样有可能造成数据丢失或引发异常的任何转换都需要执行显式转换(explicit); 相反的就

  • C#数值转换-隐式数值转换表参考

    什么是隐式转换 Implicit Conversion 隐式转换就是直接使用,比如可以把一个 byte 类型直接用在 int 上. 比如以下直接把 byte 的 b 赋给 int 的 n,之间是直接用的,没存在什么额外的关键字,全由系统自动完成类型转换. 复制代码 代码如下: byte b = 1; int n = b; 隐式数值转换表(摘自 MSDN) 从 到 sbyte short.int.long.float.double 或 decimal byte short.ushort.int.u

  • C#数值转换-显式数值转换表(参考)

    什么是显式转换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

  • sqlsever为标识列指定显式值

    sqlsever为标识列指定显式值的问题,大多是大家在两个结构完全相同的表,由其中一个表插入另一个表中指定条件的数据,报如下错误: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'*'中的标识列指定显式值. 在网上找到了解决方案,亲自试过,可以解决. 一.问题详述如下: 系统:windows2003 数据库:2005 数据库实例:wzgl2004 和wzgl2003,这两个实例都有表kc 执行语句 insert into wzgl2004.dbo.kc select

  • sqlserver为标识列指定显式值

    sqlsever为标识列指定显式值的问题,大多是大家在两个结构完全相同的表,由其中一个表插入另一个表中指定条件的数据,报如下错误: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'*'中的标识列指定显式值. 在网上找到了解决方案,亲自试过,可以解决. 一.问题详述如下: 系统:windows2003 数据库:2005 数据库实例:wzgl2004 和wzgl2003,这两个实例都有表kc 执行语句 insert into wzgl2004.dbo.kc select

  • js数值和和字符串进行转换时可以对不同进制进行操作

    Javascript数值和和字符串进行转换时,可以对不同的进制进行操作. 转换例子如下: 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>带进制的数值和字符串间进行转换</title> </head> <body> <scri

  • 探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法

    [造成原因]:Because PHP's integer type is signed, and many IP addresses will result in negative integers. [解决办法]:其官方手册中提到,可以"you need to use the "%u" formatter of sprintf() or printf() to get the string representation of the unsigned IP address&

  • 浅谈Go语言不提供隐式数字转换的原因

    什么是隐式转换 在 C 语言中,隐式数字转换是指在某些情况下,编译器会自动将一个数据类型转换为另一个数据类型,而不需要明确地进行类型转换操作. 以下是一些常见的隐式数字转换规则: 当一个整数类型和一个浮点数类型进行运算时,整数类型会被自动转换为浮点数类型. 当一个表达式中包含两种不同类型的整数类型时,小范围的整数类型会被自动转换为大范围的整数类型. 当一个表达式中包含两种不同类型的浮点数类型时,精度较低的浮点数类型会被自动转换为精度较高的浮点数类型. 以下是一个使用隐式数字转换的 C 语言代码示

  • C语言中自动隐式转换与类型强制转换实例分析

    本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

  • mysql 行列动态转换的实现(列联表,交叉表)

    (1)动态,适用于列不确定情况 create table table_name( id int primary key, col1 char(2), col2 char(2), col3 int ); insert into table_name values (1 ,'A1','B1',9), (2 ,'A2','B1',7), (3 ,'A3','B1',4), (4 ,'A4','B1',2), (5 ,'A1','B2',2), (6 ,'A2','B2',9), (7 ,'A3','B

  • 跟我学习javascript的隐式强制转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object. object是引用类型,其它的五种是基本类型或者是原始类型.我们可以用typeof方法打印来某个是属于哪个类型的.不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换.隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等.. typeof '11' //string typeof(11) //number '11' < 4 //false 一.基

随机推荐