如何格式化可空小数,使其字符串输出格式化为两位小数?
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
。我该如何解决这个问题?
答案 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'
,但这是另一回事。