加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C#基础之数据类别转换

发布时间:2023-03-23 13:41:33 所属栏目:语言 来源:
导读:int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x);输出结果:我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807;int类型的是:-2147483648~+2147483647上面的代码中,由于

int x; long y = 123456789101112; x = (int)y; Console.WriteLine(x);

输出结果:

我们知道long类型的取值范围是-9223372036854775805~+9223372036854775807;int类型的是:-2147483648~+2147483647

上面的代码中,由于long变量的值超过了int能容纳的最大值,造成了数据的丢失;像这样有可能造成数据丢失或引发异常的任何转换都需要执行显式转换(explicit);

相反的就是执行隐式转换(implicit).

用chencked检查上面的代码

从图得知上面的转换抛出了一个溢出异常,显式转换都可能不安全, (强扭的瓜就是不甜);但是如果

long的值在int的有效值范围内,这样是不会引发异常的.

下面我们再来看个例子:

int i; double d = 6.88; i = (int)d; Console.WriteLine(i);

输出结果:6

像这样发生精度丢失的我们可以把他叫做窄化转换,C#与C或C++不同,在C或C++中是可以直接将i=d的.C#的编译器告诉我们,如果接受精度损失,你就得用显式类型转换.

为什么我们初始化float类型的时候数字的后面都要在数值后面加"F"; 因为C#认为像2.3这样的带小数点的常量是拥有更高精度的double类型,编译器将因为损失精度

而拒绝而执行。所以在给float赋值时要么显式的将常量转换成float的值,要么直接在常量的后面加"F"(小写的也可以).当然我们一般在处理浮点数的时候最好还是直接使用

double这样就能避免很多类型转换.

现在我们换种方式:

像这样把低精度的值赋给高精度变量,我们就把他叫做宽化转换。

 下面来简单说说显式转换的一些限制:

在值类型中,只能在数字、字符(char)、枚举(enum)中转换;

不能把bool直接转换成其他类型,其他类型特不能直接转换成bool类型.

 第二部分:字符串与值类型的转换

主要是用到: Parse(),Convert,ToString()

string =》值类型 :

string aa = "123"; int num = int.Parse(aa); double db = double.Parse(aa);

 当然parse方法还有很多重载方法,我就不一一列出来了

 Convert是不可扩展的,只支持预定义数量的类型;他允许从任何基本类型转换到其他的基本类型

string str = "true"; bool b = Convert.ToBoolean(str) ? bool.Parse(str) : false; Console.WriteLine(b);

输出结果:True

TryParse听说这个东西在1.0版本的时候只有double才有,从2.0才普及的;TryParse()用法也和Parse()方法差不多,只是他返回的是bool值,通过out把值赋给变量。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!