You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C#中decimal.ToString()对不同字面量表现不同?

为什么C#中decimal的ToString()输出会保留声明时的小数位数?

C#里的decimal类型和常见的float/double不同,它是十进制浮点类型,内部会额外记录初始化时指定的小数位数(官方称为“刻度”,Scale)。ToString()方法默认会根据这个刻度输出字符串,所以才会出现你看到的差异:

  • 200M初始化时未指定小数部分,刻度为0,因此输出不带小数的"200"
  • 200.0M明确指定了1位小数,刻度为1,输出保留1位小数的"200.0"
  • 200.000000000000M指定了12位小数,刻度为12,输出就保留12位小数

这个设计是为了适配金融、货币这类对小数位数有严格要求的场景——比如你定义了两位小数的金额,输出时就应该保持两位,不会自动省略末尾的零。

如果需要统一输出格式,比如去掉末尾的零,可以使用格式化字符串,例如:

200.000M.ToString("G") // 输出 "200"
200M.ToString("N2")    // 输出 "200.00"

你的测试代码示例:

> 200M.ToString()
"200"
> 200.0M.ToString()
"200.0"
> 200.000000000000M.ToString()
"200.000000000000"

内容的提问来源于stack exchange,提问作者Shadow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:15:20