C#的可空类型、decimal相关
来源:互联网 发布:淘宝开店免费教程 编辑:程序博客网 时间:2024/05/01 01:21
今天,我的C#代码抛异常了。代码如下,是RPC自动生成的代码。
C# 2.0 中引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型。
Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,在.NET环境中,计算该类型的值会有性能上的损失,因为它不是基本类型。
<span style="font-family:Courier New;">static decimal? C(double x){return double.IsNaN(x) ? null : (decimal?)Math.Round((decimal)x, 6);}</span>这段代码涉及到了"值类型"和"可空类型"。
C# 2.0 中引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型。
Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,在.NET环境中,计算该类型的值会有性能上的损失,因为它不是基本类型。
以下代码测试了可空类型的使用,测试了decimal可存储的最大值,分析了C#的Exception表达的意思。
<span style="font-family:Courier New;">using System;namespace Cs_Test_decimal{ class Program {// static double? t_double1(double x)// {//编译不过去,因为x是double类型,不是double?类型。需要强转一下才行。// return x >= double.MaxValue ? null : x;// } static double? t_double2(double x) { return x >= double.MaxValue ? null : (double?)x; } static string t_string(double x) {// "类似对象的类型"是可以为null的。所以不需要加问号和强转等措施。 return x >= double.MaxValue ? null : Convert.ToString(x); } static decimal? t_decimal(double x) { return double.IsNaN(x) ? null : (decimal?)Math.Round((decimal)x, 6); } static void Main(string[] args) { try { double maxD = double.MaxValue; var testDecimal = (decimal)maxD; } catch (Exception ex) { string errorStr = "" + ex; Console.WriteLine(errorStr); //System.OverflowException: 值对于 Decimal 太大或太小。 //在 System.Decimal..ctor(Double value) //在 System.Decimal.op_Explicit(Double value) //其中,ctor是constructor的意思,表示用double构造Decimal的过程中出错了。 }; double dTest = 1.0; for (int i = 1; i <= 40; ++i) dTest *= 10; //出现了一个有趣的现象:我想得到1.0E+40,结果得到了dTest = 9.9999999999999979E+39。 try { // dTest = 1.0E+28 时候,没有抛异常。 var testDecimal = (decimal)dTest; } catch (Exception ex) { Console.WriteLine("" + ex); }; } }}</span>完。
0 0
- C#的可空类型、decimal相关
- 关于DateTime?(可为空),Decimal?类型的格式化方法
- C#的可空类型
- c#的可空类型
- C#可空类型
- C# 可空类型
- C#可空类型
- c# 可空类型
- C#可空类型
- C#可空类型
- C#可空类型
- C#可空类型
- c# 可空类型
- C# 可空类型
- C#可空类型
- c# 可空类型
- C#可空类型
- C#可空类型
- 回望2015年看过的书,2016需要看的经典书
- KVO KVC Notification Delegate Block
- HTML5图片上传插件
- Java中堆内存和栈内存详解
- 移动端h5 输入框padding-left会导致放大
- C#的可空类型、decimal相关
- 关于SearchView中onQueryTextSubmit方法执行两次的解决方法
- TLD算法学习之L-K光流法理论篇一
- Xcode7 真机调试(无需证书)详解
- dubbo的使用场景
- 批量编辑文本 - 行首行末批量编辑
- 如何将jdk1.8降到jdk1.6
- 【Nodejs】windows下node.js安装教程图文详解
- Java 大作业回忆--day05-- 手机能不能做到和激光笔一样?