C#的可空类型、decimal相关

来源:互联网 发布:淘宝开店免费教程 编辑:程序博客网 时间:2024/05/01 01:21
今天,我的C#代码抛异常了。代码如下,是RPC自动生成的代码。
<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
原创粉丝点击