浮点数值类型表示实数。所有浮点型数值类型均为值类型。它们还是简单类型,可以使用文本进行初始化。所有浮点数值类型都支持算术、比较和相等运算符。
浮点数的特征
关键字 | .NET 类型 | 大致范围 | 精度 | 大小 |
---|---|---|---|---|
float | System . Single | ±1.5 × 10 ^ -45 ~ ±3.4 × 10 ^ 38 | 6 ~ 9 位 | 4 字节 |
double | System . Double | ±5.0 × 10 ^ −324 ~ ±1.7 × 10 ^ 308 | 15 ~ 17 位 | 8 字节 |
decimal | System . Decimal | ±1.0 × 10 ^ −28 ~ ±7.9228 × 10 ^ 28 | 28 ~ 29 位 | 16 字节 |
关键字可以与 .NET 类型互换,例如:
double sjd = 1.5;
System . Double SJD = 1.5;
Console . WriteLine ( sjd == SJD );
上例输出:
True
即大小写的 sjd 均为一个类型(double)且值相等。
每种浮点类型的默认值为 zero,即 0。每种浮点类型都有 MinValue 和 MaxValue 常量,它们提供该类型的最小限值和最大限值。float 和 double 类型还提供了表示 NotaNumber 和 ±∞ 的常量。例如,double 类型提供以下常量:double . NaN,double . NegativeInfinity 和 Double . PositiveInfinity。
当所需的精度由小数点右边的位数决定时,decimal 类型是合适的。此类数字通常用于金融应用程序,用于货币金额(例如 ¥2.65)、利率(例如 2.625%)等。只精确到一个十进制数字的偶数可以用 decimal 类型更精确地处理:例如,0.1 可以用 decimal 实例精确地表示,而没有精确表示 0.1 的 double 或 float 实例(0.1 的二进制表示方式为无限循环小数)。由于数字类型的这种差异,当对十进制数据使用 double 或 float 时,可能会在算术计算中出现意外的舍入错误。当优化性能比确保精度更重要时,可以使用 double 而不是 decimal。但是,性能上的任何差异都不会被大多数计算密集型应用程序注意到。避免 decimal 的另一个可能原因是最小化存储需求。例如,ML . NET 使用 float,因为对于非常大的数据集,4 字节比 16 字节的存储要求小得多。
可以在表达式中混合整型、float 和 double。在这种情况下,整型被隐式转换为浮点型之一,必要时,float 型被隐式转换为 double 型。表达式的求值如下:
- 如果表达式中有 double 类型,则表达式的计算结果为 double,或者在关系比较和相等比较中计算为 bool。
- 如果表达式中没有 double类型,则表达式的计算结果为 float,或者在关系比较和相等比较中为 bool。
也可以在表达式中混合使用整数类型和 decimal 类型。在这种情况下,整型被隐式转换为 decimal 类型,表达式在关系和相等比较中计算为 decimal 或 bool 值。
表达式中不能将 decimal 类型与 double 和或 float 类型混合使用。在这种情况下,如果要执行算术、比较或相等操作,必须显式地将操作数从 decimal 类型转换为 float 或 double,或者反之将 float 和 double 显式转换为 decimal,如下例所示:
double a = 1.0;
decimal b = 2.1m;
Console . WriteLine ( a + ( double ) b );
Console . WriteLine ( ( decimal ) a + b );
可以使用标准数字格式字符串或自定义数字格式字符串来格式化浮点值。
实际的类型
数值文本的实际类型由其后缀确定,如下所示:
- 没有后缀或带有 d 或 D 后缀的字面值为 double 类型
- 带有 f 或 F 后缀的字面值为 float 类型
- 带有 m 或 M 后缀的字面值是 decimal 类型
下面的代码演示了两者的一个例子:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
前面的示例还展示了“_”作为数字分隔符的使用。您可以将数字分隔符用于所有类型的数字字面值。
您也可以使用科学记数法,即指定实际文字的指数部分,如下面的示例所示:
double d = 0.42e2;
Console . WriteLine(d); // output 42
float f = 134.45E-2f;
Console . WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console . WriteLine(m); // output: 1500000
转换
浮点数字类型之间只有一种隐式转换:从 float 到 double。但是,可以使用显式强制转换将任何浮点类型转换为任何其他浮点类型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。