_NET中的十进制浮点类型.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
_NET中的十进制浮点类型

_NET中的十进制浮点类型 这篇文章给出了更多关于这个类型的细节,包括它的表示和它与更多公共二进制浮点类型的区别。从这开始,我应该仅仅称它为十进制类型而不是System.Decimal, 这同样是单精度浮点类型(float)和双精度浮点类型(double)所提及的, 我的意思分别是指.NET 类型中的System.Single和System.Double. 为了让这篇文章看起来很容易,我也将从这开始弃用正式类型中的名字。 什么是十进制类型 十进制类型仅是浮点数的另外一种表示形式 - 但是与单精度浮点类型和双精度浮点类型不同,十进制类型使用的进制是10。如果你还没有读上面链接给出的文章,现在将会是读它的最佳时间 - 我将不会在这篇文章中探讨浮点类型数字。 十进制类型于任何其他浮点数字有同样的组件: 一个尾数, 一个指数和一个符号。按照惯例, 符号位仅是一个比特,但是有96比特的尾数和5比特的指数位。然而,并不是所有指数组合都是合法的。只有值是0~28的才能工作,所有的负数也都是有效的: 数字值是符号*尾数/10指数。这意味着这个类型的最大值和最小值是+/-(296-1), 最小的非零数字在绝对值上是10-28. 指数被限制的原因是尾数可以存储28或29个十进制数字(取决于它自己的精度)。你可以将28个数字可以设置成任何你想要的值,你可以将十进制浮点放在第一个数字的左边到最后一个数字的右边间的任何一个地方,(有一些你可以让第29个数字在其余数字左边的数字,但是由于限制,你不可以使用29个数字的所有组合。)它们都是有效的。 一个十进制数是如何存储的 一个十进制数用128比特存储,尽管只有102比特是严格必须要有的。把十进制数认为是由尾数表示的3个32位整型数是很方便的,然后就可以用一个整数表示符号位和指数位。最后一个整数的最高位是符号位(在正式方式中,将最高位设置成(1)表示负数)同时16~23位(高16位字的低位)表示指数。其他位必须都是(0). 这个表示是由decimal.GetBits(decimal)提供的可以返回一个4个整型数数组的方式。 格式化十进制数 与单精度浮点数和双精度浮点数不同,当.NET被要求将一个十进制数格式化成一个字符串表示形式时,它的默认行为是给出精确值。这意味着二进制浮点类型文章之中的DoubleConverter代码 里提到的一个十进制等效是没有必要的。当然,你可以用它来将值限制到一个特殊的精度。 保留0 在.NET 1.0 和1.1 间, 十进制类型经历了一个微妙的变化。考虑下面的简单代码: view source print? using System; public class Test { static void Main() { decimal d = 1.00m; Console.WriteLine (d); } } 当我首先运行上面的代码时(或者一些类似的),我期待它输出的结果是1(这是.NET 1.0中应该有的结果)——但实际上,输出是1.00。十进制类型没有使用它自己的标准 - 它记住了它有多少个十进制数字(通过维护可能的说明)并格式化,0可能被计入一个重要的十进制数字。当两个不同的十进制数相乘,相除,相加等等时,我不知道选择哪个说明(这里有一个选择)的精确规则,但是当你用如下的程序测试时你可能会发现它很有趣。 view source print? using System; public class Test { static void Main() { decimal d = 0.000 000 000; while (d != 0m) { Console.WriteLine (d); d = d/5m; } } } 它生成了一系列结果: view source print? 0.00000000000010000 0.00000000000002000 0.00000000000000400 0.00000000000000080 0.00000000000000016 0.000000000000000032 0.0000000000000000064 0.00000000000000000128 0.000000000000000000256 0.0000000000000000000512 0.00000000000000000001024 0.000000000000000000002048 0.0000000000000000000004096 0.00000

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档