为何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
相关产品推荐
相关产品推荐

