decimal(C# 参考)

decimal 关键字指示 128 位数据类型。与浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。 decimal 类型的大致范围和精度如下表所示。

类型 大致范围 精度 .NET Framework 类型
decimal (-7.9 x 1028 - 7.9 x 1028) / (100 - 28) 28-29 个有效位 System.Decimal

文本

如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:


decimal myMoney = 300.5m;

如果没有后缀 m,则数字将被视为 double 类型并会生成编译器错误。

转换

整型将被隐式转换为 decimal 类型,其计算结果为 decimal。因此,你可以使用整数文本初始化十进制变量而不使用后缀,如下所示:


decimal myMoney = 300;

在浮点型和 decimal 类型之间不存在隐式转换;因此,必须使用强制转换以在这两个类型之间转换。例如:


        decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

你还可以在同一表达式中混合使用 decimal 和数值整型。但是,不进行强制转换就混合使用 decimal 和浮点型将导致编译错误。

有关隐式数值转换的更多信息,请参见隐式数值转换表(C# 参考)

有关显式数值转换的更多信息,请参见显式数值转换表(C# 参考)

设置十进制输出的格式

你可以通过使用 String.Format 方法或 Console.Write 方法(其调用 String.Format())来设置结果的格式。货币格式是使用标准货币格式字符串“C”或“c”指定的,如本文后面的第二个示例所示。有关 String.Format 方法的更多信息,请参见 String.Format

下面的示例尝试添加 doubledecimal 变量,这会导致编译器错误。

double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to 
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub); 

// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);

其结果为以下错误:

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

在此示例中,同一个表达式中混合使用了 decimalint。计算结果为 decimal 类型。

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 严格按照正确的格式显示。

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# 语言规范。该语言规范是 C# 语法和用法的权威资料。

请参阅

Decimal

C# 参考

C# 编程指南

C# 关键字

整型表(C# 参考)

内置类型表(C# 参考)

隐式数值转换表(C# 参考)

显式数值转换表(C# 参考)

标准数字格式字符串