多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# decimal(C# 参考) **decimal** 关键字指示 128 位数据类型。与浮点型相比,**decimal** 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。 **decimal** 类型的大致范围和精度如下表所示。 | 类型 | 大致范围 | 精度 | .NET Framework 类型 | | --- | --- | --- | --- | | **decimal** | (-7.9 x 1028 - 7.9 x 1028) / (100 - 28) | 28-29 个有效位 | [System.Decimal](https://msdn.microsoft.com/zh-CN/library/system.decimal.aspx) | ## 文本 如果希望实数被视为 **decimal** 类型,请使用后缀 m 或 M,例如: ``` decimal myMoney = 300.5m; ``` 如果没有后缀 m,则数字将被视为 [double](https://msdn.microsoft.com/zh-CN/library/678hzkk9.aspx) 类型并会生成编译器错误。 ## 转换 整型将被隐式转换为 **decimal** 类型,其计算结果为 **decimal**。因此,你可以使用整数文本初始化十进制变量而不使用后缀,如下所示: ``` decimal myMoney = 300; ``` 在浮点型和 **decimal** 类型之间不存在隐式转换;因此,必须使用强制转换以在这两个类型之间转换。例如: ``` decimal myMoney = 99.9m; double x = (double)myMoney; myMoney = (decimal)x; ``` 你还可以在同一表达式中混合使用 **decimal** 和数值整型。但是,不进行强制转换就混合使用 **decimal** 和浮点型将导致编译错误。 有关隐式数值转换的更多信息,请参见[隐式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/y5b434w4.aspx)。 有关显式数值转换的更多信息,请参见[显式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/yht2cx7b.aspx)。 ## 设置十进制输出的格式 你可以通过使用 **String.Format** 方法或 [Console.Write](https://msdn.microsoft.com/zh-CN/library/system.console.write.aspx) 方法(其调用 **String.Format()**)来设置结果的格式。货币格式是使用标准货币格式字符串“C”或“c”指定的,如本文后面的第二个示例所示。有关 **String.Format** 方法的更多信息,请参见 [String.Format](https://msdn.microsoft.com/zh-CN/library/fht0f5be.aspx)。 下面的示例尝试添加 [double](https://msdn.microsoft.com/zh-CN/library/678hzkk9.aspx) 和 **decimal** 变量,这会导致编译器错误。 ``` 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' 在此示例中,同一个表达式中混合使用了 **decimal** 和 [int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx)。计算结果为 **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# 语言规范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。 ## 请参阅 [Decimal](https://msdn.microsoft.com/zh-CN/library/system.decimal.aspx) [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [C# 关键字](https://msdn.microsoft.com/zh-CN/library/x53a06bb.aspx) [整型表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/exx3b86w.aspx) [内置类型表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/ya5y69ds.aspx) [隐式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/y5b434w4.aspx) [显式数值转换表(C# 参考)](https://msdn.microsoft.com/zh-CN/library/yht2cx7b.aspx) [标准数字格式字符串](https://msdn.microsoft.com/zh-CN/library/dwhawy9k.aspx)