CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?

楼主crazystudio(待从头,收拾旧山河)2005-05-14 20:27:33 在 .NET技术 / C# 提问

如上! 问题点数:0、回复次数:20Top

1 楼fancyf(凡瑞)回复于 2005-05-14 20:31:12 得分 0

double是64位的,比single-32位精度高  
  decimal128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差Top

2 楼sunjian_qi(sonne)回复于 2005-05-14 20:33:10 得分 0

decimal   表示   128   位数据类型。同浮点型相比,decimal   类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。Top

3 楼crazystudio(待从头,收拾旧山河)回复于 2005-05-14 20:36:14 得分 0

哪double和single主要用于什么场合?Top

4 楼fancyf(凡瑞)回复于 2005-05-14 20:39:17 得分 0

任何需要浮点数的场合  
  精度要求不高就用single,反之doubleTop

5 楼crazystudio(待从头,收拾旧山河)回复于 2005-05-14 20:40:54 得分 0

好,谢谢   fancyf(Fancyray)   sunjian_qi(sonne)   !Top

6 楼fancyf(凡瑞)回复于 2005-05-14 20:41:30 得分 0

不客气Top

7 楼dutguoyi(新鲜鱼排)回复于 2005-05-14 20:44:18 得分 0

上网搜索一下就都有了。Top

8 楼sunjian_qi(sonne)回复于 2005-05-14 20:47:27 得分 0

不客气Top

9 楼jedliu(21世纪什么最贵? 人才!)回复于 2005-05-14 20:51:09 得分 0

decimal由于更精确,所以一般用于财务和货币计算,并且在数据库里也有它,这样统一起来比较比double好。double适合一般的计算,比如统计成绩什么的。single本人用的比较少,所以没什么好的经验给你Top

10 楼silentwins(原谅我当天不懂得珍惜只知任性...)回复于 2005-05-14 20:59:58 得分 0

最主要是看情况和你估计数字的精度啦  
  精度超高当然double啦,连一点性能都要榨取的话,那就....  
  一般都用decimal,用于一般生活的都有足够的精度和方便Top

11 楼Sunmast(速马@Redmond, WA)回复于 2005-05-14 21:28:25 得分 0

decimal的大小是double的两倍,float(single)的四倍  
  decimal的精度是可变的,其他两个不是  
  double和float是primitive类型,decimal不是Top

12 楼zeusvenus()回复于 2005-05-14 21:36:08 得分 0

还应该注意三者带来的系统开销相差比较大。Top

13 楼coolsunwind(飘)回复于 2005-05-14 21:48:20 得分 0

学习!Top

14 楼sunjian_qi(sonne)回复于 2005-05-15 00:13:10 得分 0

纠正速马老大一个错误,应该是decimal的精度是double的两倍,float(single)的四倍吧。:)  
  就大小而言,decimal还不及float吧  
   
  类型           大致范围                                                               精度  
  ----------------------------------------------------------------  
  float         ±1.5   ×   10^−45   到   ±3.4   ×   10^38             7   位    
  double       ±5.0   ×   10^−324   到   ±1.7   ×   10^308         15   到   16   位    
  decimal     ±1.0   ×   10^−28   到   ±7.9   ×   10^28             28   到   29   位有效位Top

15 楼sunjian_qi(sonne)回复于 2005-05-15 00:14:09 得分 0

纠正速马老大一个错误,应该是decimal的精度是double的两倍,float(single)的四倍吧。:)  
  就大小而言,decimal还不及float吧  
   
  类型           大致范围                                                                   精度  
  ----------------------------------------------------------------  
  float         ±1.5   ×   10^(−45)   到   ±3.4   ×   10^38             7   位    
  double       ±5.0   ×   10^(−324)   到   ±1.7   ×   10^308         15   到   16   位    
  decimal     ±1.0   ×   10^(−28)   到   ±7.9   ×   10^28             28   到   29   位有效位Top

16 楼sunjian_qi(sonne)回复于 2005-05-15 00:15:36 得分 0

显示有问题我写的是负号,变成了−,用了Server.HtmlEncode???Top

17 楼fancyf(凡瑞)回复于 2005-05-15 00:19:16 得分 0

to     sunjian_qi(sonne):  
  速马没有说错,他说的大小是存储的大小,decimal占8个字节,double-4个字节,single2个字节Top

18 楼fancyf(凡瑞)回复于 2005-05-15 00:20:05 得分 0

汗,正好少说了一半  
  应该decimal占16个字节,double-8个字节,single-4个字节Top

19 楼sunjian_qi(sonne)回复于 2005-05-15 00:33:02 得分 0

晕,是我没学好……Top

20 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-05-15 00:42:43 得分 0

再精确计算中使用浮点数是非常危险的,尽管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要小。Top

相关问题

  • 请问:decimal和numeric的区别是什么?
  • c++问题!!!!!!!!DOUBLE和float的区别 一定给分!!
  • 区别
  • 区别?
  • 区别?
  • 区别?
  • 区别?!
  • 区别??
  • 请教大家一个FLOAT 和 DOUBLE 在一个程序的区别
  • decimal

关键词

  • 转换
  • 精度
  • decimal
  • 浮点数
  • double
  • single
  • 损失
  • 类型
  • 运算
  • 大小

得分解答快速导航

  • 帖主:crazystudio

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo