为什么ADecimalNumber.ToString(“#,## 0”)围绕数字?

时间:2017-06-20 07:08:29

标签: c# string

C#:我有一个十进制数字,我想用逗号分隔千位数而不是数字。作为堆栈溢出的答案,我使用了.ToString("#,##0")但它将数字四舍五入。我不能接受这个数字!

在我的模特中我有:
 public decimal? ADecimalNumber { get; set; }
在控制器中我有:
 ViewBag.ADecimalNumber = result?.ADecimalNumber;
在视图中我有:
 @(ViewBag.ADecimalNumber != null ? ViewBag.ADecimalNumber.ToString("#,##0") : '-')

快速观看模式下的ViewBag值为11106.8314MViewBag.ADecimalNumber.ToString("#,##0")结果为"11,107"

2 个答案:

答案 0 :(得分:2)

这是自定义说明符的默认行为。请参阅The "#" Custom Specifier

  

“##”格式字符串使得值四舍五入到小数点前面的最接近的数字,其中始终使用从零开始的舍入。例如,使用“##”格式化34.5将导致值为35。

答案 1 :(得分:0)

舍入是#自定义数字格式化程序行为的一部分。如果您不想舍入,请使用Math.Truncate()在句点之后剪切数字:

Math.Truncate(ViewBag.ADecimalNumber).ToString("#,##0")

如果要打印n个小数位,请将数字乘以10的n次幂,截断,然后除以相同的幂,例如:Math.Truncate(123456.78M * 10M)/10M将给出123456.7,您可以使用格式字符串#,###.#