为什么我不能把它转换成双倍?

时间:2013-07-22 17:44:30

标签: c# asp.net-mvc

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

我试过以下:

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("#.##")显示小时“9”

,它就不会显示在用户界面上

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

8 个答案:

答案 0 :(得分:2)

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")) });

答案 1 :(得分:2)

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") });

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您的查询结果不是一个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") });

答案 4 :(得分:0)

尝试:

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

答案 5 :(得分:0)

试试这个:

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

答案 6 :(得分:0)

你也可以这样做:

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

答案 7 :(得分:0)

感谢您的所有投入,他们肯定帮助我们找到了以下解决方案:

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

高效的解决方案:

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