为什么我不能把这个换成双

本文关键字:不能 为什么 | 更新日期: 2023-09-27 18:24:33

如何在数字后显示两个小数点?

我尝试过以下内容:

var hrs = (from p in Hours.Where(h.UserName == UserName())
                              group p by p.Hours into g
                              select g.Sum(p => p.Hours)).Sum().ToString("#.##");
return Json(new { data = Convert.ToDouble(hrs).ToString("#.##") });

但如果没有Convert.ToDouble()ToString("#.##"),它不会在UI上显示任何内容——它显示小时"9"

我们如何格式化通过查询上述数据库得到的结果?

为什么我不能把这个换成双

ToString("N2")用于显示两个小数点

var hrs = (from p in Hours.Where(h.UserName == UserName())
                          group p by p.Hours into g
                          select g.Sum(p => p.Hours)).ToString("#.##");
return Json(new { data = Convert.ToDouble(hrs).ToString("N2") });

Linq查询的结果将是IEnumerabl<string>(或IQueryable<string>)。你需要做这样的事情:

var hrs = 
    (from p in Hours.Where(h.UserName == UserName())
     group p by p.Hours into g
     select g.Sum(p => p.Hours));
 return Json(new { data = hrs.Select(x => x.ToString("N2")) });

使用ToDouble(hrs).ToString("f2")

查询的结果不是单个double,而是一个IEnumerable<double>,用户所属的每个组都有一个条目。

您需要在结果中添加另一个.Sum()(以获得用户所在的所有组的总和)。由此,您可以执行ToString("0.00")。您也不需要额外的Convert()ToString()

var hrs = (from p in Hours.Where(h => h.UserName == UserName())
   group p by p.Hours into g
   select g.Sum(p => p.Hours)).Sum().ToString("0.00");
return Json(new { data = hrs });

编辑:

ToString("#.##")更改为ToString("0.00")。或者,使用ToString("N2")

编辑#2:

除非有什么原因需要分组,否则我会将您的LINQ语句和随后的Json调用简化为:

var hrs = (from p in Hours
   where p.UserName == UserName()
   select p.Hours).Sum();
return Json(new { data = hrs.ToString("0.00") });

尝试:

Json(new { data = Convert.ToDouble(hrs).ToString("N2") });

试试这个:

Json(new { data = String.Format("{0.00}",Convert.ToDouble(hrs))});

您还可以执行:

return Json(new { data = Convert.ToDouble(hrs).ToString("#.00") });

感谢您的所有投入,他们无疑有助于整合以下解决方案:

Decimal.Parse(hrs.ToString()).ToString("N2")

高效解决方案:

Convert.ToDecimal(hrs).ToString("N2")