Name |
CTS Type |
Description |
Significant Figures |
Range (approximate) |
---|---|---|---|---|
float |
System.Single |
32-bit single-precision floating point |
7 |
±1.5 × 10−45 to ±3.4 × 1038 |
double |
System.Double |
64-bit double-precision floating point |
15/16 |
±5.0 × 10 −324 to ±1.7 × 10308 |
如果我们在代码中写一个12.3,编译器会自动认为这个数是个double型。所以如果我们想指定12.3为float类型,那么你必须在数字后面加上F/f:
float f = 12.3F;
作为补充,decimal类型用来表示高精度的浮点数
Name |
CTS Type |
Description |
Significant Figures |
Range (approximate) |
---|---|---|---|---|
decimal |
System.Decimal |
128-bit high precision decimal notation |
28/29 |
±1.0 × 10−28 to ±7.9 × 1028 |
从上表可以看出,decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。decimal类型并不是C#中的基础类型,所以使用的时候会对计算时的性能有影响。
我们可以像如下的方式定义一个decimal类型的浮点数:
decimal d = 12.30M;
引用自:http://topic.csdn.net/t/20050514/20/4007155.html 中Ivony的评论
在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。
文章参考:http://www.cnblogs.com/gf7788/archive/2009/07/24/1529848.html
float 单精度浮点 32bit,
double 双精度浮点64bit,
decimal是高精度 128bit,浮点型。
他们都有精度问题, 多数情况用decimal即可
float、float是primitive type
decimal不是 primitive type
注:
As Jeffrey Richter said, primitive types are any data type the compiler directly supports. In C#。
枚举只能用Primitive类型。
enum Flag : Int32 {},编译器就会报错,错误信息仅仅是“应输入类型 byte、sbyte、short、ushort、int、uint、long 或 ulong”