decimal 后面的后缀M的意思

来源:互联网 发布:ev3手机遥控软件 编辑:程序博客网 时间:2024/04/27 22:06

    今天看个视频,看到个 decimal q=123123.123123M,有个后缀M,查了半天查了这个结果

    C#与Java一样,都支持了float与double这两种浮点数的基础型别。这两种浮点数的型式皆为A*Base^Exp,其中A是浮点数的尾数(mantissa),Base是基底,而Exp则是指数部份。这意谓该浮点数的值为A乘上基底的Exp次方。关于浮点数的设计,于数值方法或数值分析的课程中皆会探讨,本处则不必细言。透过上次的设计虽然可以表示极大范围的实数,但是由于实数是连续的,其实有无限多个,所以无论如何以数字的方式表示实数,都有其极限。当利用浮点数来表示某个实数时,若该浮点数表示法无法表示时,会进行进位(rounding)的动作,进位后难免产生误差(rounding error)。尤其人皆采十进制思考运算,但float与double皆以2为基底,可想而知的是,透过这种方式来表示浮点数,会有许多看起来以十进制可以表示的小数,以2为基底时却发生了进位误差。C#引入了一个名为decimal的型别,而decimal型别存在的最大原因就是要降低进位误差,因为它的基底采取的是10而非2。请参考下例:

    double d = 0.12345678901234567890123456789;
    decimal m = 0.12345678901234567890123456789m;
    Console.WriteLine(d);
    Console.WriteLine(m);

    其中decimal m行宣告了一个decimal型别的变量,而之后的0.12345678901234567890123456789数值常数后加上m(也可写成M),是在C#中用来表示该常数为decimal型别之用。如同float常数需加上d(也可写成D)一般。在这个例子中,d与m皆被指派了相同的常数值,但实际印出的结果却如下:

    0.123456789012346
    0.1234567890123456789012345679

    两个数值都发生了进位的误差,但可以观察出以decimal型别表示十进制的数字,其进位误差小多了。而降低进位误差的代价,就是付出(也同时浪费)储存的空间,以及运算的速度。

转至于http://blog.sina.com.cn/s/blog_4dabb12801000anp.html

1 0