无法使用ToString格式化可空小数(“#。##”)

时间:2018-01-13 00:47:30

标签: linq format decimal

如何格式化可空小数,使其字符串输出格式化为两位小数?

Salary = g.Where(x => !String.IsNullOrEmpty(x.Salary))
.Select(x => (decimal?)decimal.Parse(x.Salary))
.DefaultIfEmpty(null)
.Sum().ToString();

以上情况有效,但有时会产生非常长的小数结果

203827.82763651324038269

我想将结果格式化为两位小数

203827.83

由于我想要的输出是一个字符串,我认为我可以使用

.Sum().ToString("#.##);

我认为错误No overload for method 'ToString' takes 1 arguments我认为是因为结果为nullable decimal。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

是的,你是对的。可以为空的十进制ToString不带任何参数,也没有重载。您需要访问可空小数的值:

var Salary = g.Where(x => !String.IsNullOrEmpty(x.Salary))
.Select(x => (decimal?)decimal.Parse(x.Salary))
.DefaultIfEmpty(null)
.Sum();
var result=Salary.HasValue?Salary.Value.ToString("#:##"):"";

答案 1 :(得分:1)

你是对的,Nullable(T).ToString()不接受任何争论。相反,您可以使用旧的string.Format或字符串插值速记:

var result = g.Where(x => !String.IsNullOrEmpty(x.Salary))
    .Select(x => (decimal?)decimal.Parse(x.Salary))
    .DefaultIfEmpty(null)
    .Sum();

Salary = $"{result:#.###}";

但是,目前尚不清楚为什么要在decimal?施放Salary = g.Where(x => !String.IsNullOrEmpty(x.Salary)) .Select(x => decimal.Parse(x.Salary)) .Sum() ToString("#.###"); ,为什么不这样做呢:

x.Salary

当然,我建议将decimal值保留为string而不是 Traceback (most recent call last): File "demo.py", line 2, in <module> import cv2 ModuleNotFoundError: No module named 'cv2' ,但这是另一回事。