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

简介: 原文:C#中对于float,double,decimal的误解 一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖。 浮点型 如果我们在代码中写一个12.3,编译器会自动认为这个数是个double型。
原文: C#中对于float,double,decimal的误解

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

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

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

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

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

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


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

目录
相关文章
|
4月前
|
存储 Java
百度搜索:蓝易云【Java语言之float、double内存存储方式】
由于使用IEEE 754标准进行存储,float和double类型可以表示非常大或非常小的浮点数,并且具有一定的精度。然而,由于浮点数的特性,它们在进行精确计算时可能会存在舍入误差。在编写Java程序时,需要注意使
59 0
|
1月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
34 1
|
6月前
|
存储 C语言
C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
33 1
|
5月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
43 1
|
5月前
|
Java
float与double精度丢失问题
float与double精度丢失问题
|
6月前
float和double的区别
float和double的区别
55 0
|
8月前
|
C++
C/C++ 关于double和float两种类型的区别
C/C++ 关于double和float两种类型的区别
C/C++ 关于double和float两种类型的区别
|
7月前
|
存储 Java 编译器
Java语言之float、double内存存储方式
Java语言之float、double内存存储方式
138 0
|
7月前
|
存储 关系型数据库 MySQL
【必看】MySQL中float、double、decimal三个浮点数据类型的区别与总结!
你还不知道MySQL中float、double、decimal三个浮点类型的区别吗?快来看看吧!
92 0
【必看】MySQL中float、double、decimal三个浮点数据类型的区别与总结!
|
8月前
|
存储 Java
Java 最常见的面试题:float 和 double 的区别是什么?
Java 最常见的面试题:float 和 double 的区别是什么?