Csharp数值.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Csharp数值

C#为小数值存储而预定义数据类型浮点型 NameCTS Type 通用类型系统Description 说明描述 Significant Figures 有效数字 Range (approximate) 取值范围(大约) Float 浮点 System.Single 32-bit single-precision floating point 32位单精度浮点 7 ±1.5 × 10?45 to ±3.4 × 1038 Double 双精浮点 System.Double 64-bit double-precision floating point 64位双精度浮点 15/16 ±5.0 × 10 ?324 to ±1.7 × 10308 如果我们在代码中写一个12.3,编译器会自动认为这个数是个double型。所以如果我们想指定12.3为float类型,那么你必须在数字后面加上F/f: float f = 12.3F; decimal类型 作为补充,decimal类型用来表示高精度的浮点数 Name CTS Type Description Significant Figures Range (approximate) Decimal System.Decimal 128-bit high precision decimal notation 128位高精度数字型标记法28 ±1.0 × 10?28 to ±7.9 × 1028 从上表可以看出,decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。decimal类型并不是C#中的基础类型,所以使用的时候会对计算时的性能有影响。 我们可以像如下的方式定义一个decimal类型的浮点数: decimal d = 12.30M; 对decimal、float、double错误的认识 在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。 考虑下面的语句: double dd = 10000000000000000000000d; dd += 1; Console.WriteLine ( {0:G50}, dd );??? ???? 输出是什么?谁知道? 输出是:1000000000000000000000000??? ???? 这就是浮点数精度损失的问题,最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。 浮点数的精度损失可能在很多地方出现,例如d * g / g 不一定等于d,d / g * g也不一定等于d。??? ???? 还有两个非常危险的错误认识!! 1、decimal不是浮点型、decimal不存在精度损失。 下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在! decimal dd = 10000000000000000000000000000m; dd += 0.1m; Console.WriteLine ( {0:G50}, dd );??? ???? 2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。 微软在decimal的帮助上真的要好好反省了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。 “decimal?? 类型是适合财务和货币计算的?? 128?? 位数据类型。” 当然,decimal在大多数情况下是安全的,但浮点数在理论上是不安全的。 至于精度误差造成的显示问题,则是很容易修补的。浮点数会带来的问题以及整型能避免的问题就是一个: 譬如说从A帐户转账到B帐户,经计算得出结果是3.788888888888888元,那么我们从A帐户扣除这么多钱,B帐户增加这么多钱,但事实上A帐户不一定会扣除准确的数值,例如A帐户的金额在100000000000,那么这个时候100000000000?? -?? 3.788888888888888运算结果很有可能是99999999996.211111111111112。而这个时候B帐户的金额为0则很有可能加上准确的数值,如3.788888888888888,这样一来,0.011111111111112元钱就会不见了,日积月累的,差额就会越来越大。 double是64位的,比single-32位精度高?? decimal128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差 ,d

文档评论(0)

kabudou + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档