C#中对于float,double,decimal的误解

原文: C#中对于float,double,decimal的误解

一直很奇怪C#的预约义数据类型中为何加了一个decimal,有float和double不就够了吗?今天来挖一挖。
浮点型html

C#中对于float,double,decimal的误解

若是咱们在代码中写一个12.3,编译器会自动认为这个数是个double型。因此若是咱们想指定12.3为float类型,那么你必须在数字后面加上F/f:
float f = 12.3F;url

decimal类型
做为补充,decimal类型用来表示高精度的浮点数.net

C#中对于float,double,decimal的误解
对decimal、float、double错误的认识
引用自:http://topic.csdn.net/t/20050514/20/4007155.html 中Ivony的评论htm

在精确计算中使用浮点数是很是危险的,尽管C#在浮点数运算时采起了不少措施使得浮点数运算的结果看起来是很是正常的。但实际上若是不清楚浮点数的特性而贸然使用的话,将形成很是严重的隐患。  
   
  考虑下面的语句:  
   
              double   dd    10000000000000000000000d 
              dd   +=   1;  
              Console.WriteLine    "{0:G50}",   dd   );  
   
  输出是什么?谁知道?  
  输出是:100000000000000000000000 
   
  这就是浮点数精度损失的问题,最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。  
   
  浮点数的精度损失可能在不少地方出现,例如d       不必定等于d,d      g也不必定等于d。  
   
  还有两个很是危险的错误认识!!  
   
  一、decimal不是浮点型、decimal不存在精度损失。  
   
  下面有段程序你们能够去看看结果是什么。记住!全部的浮点型变量都存在精度损失的问题,而decimal是一个彻彻底底的浮点型,不论它精度有多高,精度损失依然存在!  
   
                  decimal   dd    10000000000000000000000000000m;  
                  dd   +=   0.1m;  
                  Console.WriteLine    "{0:G50}",   dd   );  
   
  二、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。  
   
  微软在decimal的帮助上真的要好好检讨了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。blog


本文来自CSDN博客,http://blog.csdn.net/ccy3253/archive/2008/01/28/2070616.aspxci

相关文章
相关标签/搜索