更新:2007 年 11 月
decimal 关键字表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。decimal 类型的大致范围和精度如下表所示。
类型 | 大致范围 | 精度 | .NET Framework 类型 |
---|---|---|---|
decimal | ±1.0 × 10-28 到 ±7.9 × 1028 | 28 到 29 位有效位 |
文本
如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
复制代码 | |
---|---|
decimal myMoney = 300.5m; |
如果没有后缀 m,数字将被视为
转换
整型被隐式转换为 decimal,其计算结果为 decimal。因此,可以用整数初始化十进制变量而不使用后缀,如下所示:
复制代码 | |
---|---|
decimal myMoney = 300; |
在浮点型和 decimal 类型之间不存在隐式转换;因此,必须使用强制转换在这两种类型之间进行转换。例如:
复制代码 | |
---|---|
decimal myMoney = 99.9m; double x = (double)myMoney; myMoney = (decimal)x; |
还可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal 和浮点型将导致编译错误。
有关隐式数值转换的更多信息,请参见隐式数值转换表(C# 参考)。
有关显式数值转换的更多信息,请参见显式数值转换表(C# 参考)。
格式化十进制输出
可以通过使用 String.Format 方法或
示例
在此例中,同一个表达式中混合使用了 decimal 和
下面的示例使用某个语句来尝试添加
复制代码 | |
---|---|
double x = 9; Console.WriteLine(d + x); // Error |
其结果是导致以下错误:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
C# | 复制代码 |
---|---|
public class TestDecimal { static void Main() { decimal d = 9.1m; int y = 3; Console.WriteLine(d + y); // Result converted to decimal } } // Output: 12.1 |
在此例中,使用了货币格式字符串来设置输出格式。注意:其中 x 被舍入,因为其小数点位置超出了 $0.99。而表示最大精确位数的变量 y 严格按照正确的格式显示。
C# | 复制代码 |
---|---|
public class TestDecimalFormat { static void Main() { decimal x = 0.999m; decimal y = 9999999999999999999999999999m; Console.WriteLine("My amount = {0:C}", x); Console.WriteLine("Your amount = {0:C}", y); } } /* Output: My amount = $1.00 Your amount = $9,999,999,999,999,999,999,999,999,999.00 */ |
C# 语言规范
有关更多信息,请参见 C# 语言规范中的以下各章节:
1.3 类型和变量
4.1.7 decimal 类型