全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c#中decimal ,double,float的区别浮点型NameCTS TypeDescriptionSignificant FiguresRange (approximate)floatSystem.Single32-bit single-precision floating point71.5 10?45 to 3.4 1038doubleSystem.Double64-bit double-precision floating point15/165.0 10 ?324 to 1.7 10308如果我们在代码中写一个12.3,编译器会自动认为这个数是个double型。所以如果我们想指定12.3为float类型,那么你必须在数字后面加上F/f:float f = 12.3F;decimal类型作为补充,decimal类型用来表示高精度的浮点数NameCTS TypeDescriptionSignificant FiguresRange (approximate)decimalSystem.Decimal128-bit high precision decimal notation281.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位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。早上刚到办公室,就被中试室打来电话叫去,原来软件在测试过程中发现了个小问题:软件读出来的数据比设备LCD上显示数据小了 0.01 。怎么会这样呢,数据类型我已经用了 double 型了整个数据长度也就6位,double型的数据有效数据位为7位,也够了阿,不明白。于是回来下断点跟踪。前面double型在算的时候,是没问题的,数据是66.24,可是当我把66.24 乘上100后的处理结果就不对了:66.24*100.0d = 6623.999991,问题就出在这里了。查了msdn,Double型的数据:Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。所以就出现了乘上一百后,精度就不够了。又由于我们在处理数据时,是不允许四舍五入的,所以,经过单位转换后,软件中最终显示的数据为 66.23 ,比LCD上显示的66.24 小了 0.01。因此,这之后就想到了应该用更高精度的 decimal 型。类型大致范围精度.NET Framework 类型decimal1.0 10e?28 至 7.9 10e2828 到 29 位有效位System.Decimal在声明decimal类型数据时,可以 a: decimal myData = 100,此时编译器隐式转换整型数100为 100.0m;当然也可以b: decimal myData = 100.0m,但是 如果是 decimal myData = 100.0d或者decimal myData = 100.0f,就不行了,因为100.0d或者100.0f,编译器认为是浮点数,而浮点数和decima
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年贵港辅警招聘考试真题及答案详解(名校卷)
- 2024年北京辅警招聘考试真题有答案详解
- 2023年莆田辅警协警招聘考试真题及参考答案详解一套
- 2023年甘南州辅警协警招聘考试备考题库及答案详解(名师系列)
- 2023年眉山辅警招聘考试真题附答案详解(基础题)
- 2023年邵阳辅警协警招聘考试真题带答案详解(完整版)
- 2023年綦江县辅警协警招聘考试备考题库含答案详解(a卷)
- 2024年宝鸡辅警招聘考试真题含答案详解(精练)
- 2024年大连辅警协警招聘考试真题含答案详解
- 2023年重庆辅警招聘考试真题及参考答案详解
- 质检技能培训课件模板
- 人口老龄化对城镇职工养老保险基金支付能力的影响研究
- DB42T 1049-2015 房产测绘技术规程
- 2025年中国交建招聘笔试参考题库附带答案详解
- 心理健康汇报课件
- 学堂在线 工程伦理 章节测试答案
- GB/T 18501.8100-2025电子和电气设备用连接器产品要求第8-100部分:电源连接器2芯、3芯20 A功率加2芯信号塑料外壳屏蔽密封连接器详细规范
- 植入介入类管理制度
- (高清版)DB31∕T 1504-2024 应用软件适配信息技术应用创新环境技术规范
- 2023年12月英语四级真题及答案-第1套
- 不同抑酸剂四联方案与改良伴同方案根除幽门螺杆菌的疗效对比探究
评论
0/150
提交评论