decimal 后面的后缀M的意思

    今天看个视频,看到个 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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值