2013-07-22 2 views
3

Как я могу отобразить две десятичные точки после номера?Почему я не могу преобразовать это в двойное?

Я попытался следующие:

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»

Как мы результаты форматирования, которые мы получаем с помощью запросов к базам данных как выше?

ответ

0

Спасибо за все ваши ввода, они определенно помогли в следующем состязании:

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

Эффективное решение:

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

Почему вы конвертируете в строку, анализируя обратно в double, просто для повторного преобразования в строку? Какой тип данных «hrs»? –

+0

он десятичный. Тип DB: числовой (5,2) – user793468

+0

@MattHouser Convert.ToDecimal (hrs) .ToString («N2») работает также – user793468

1

Использование ToDouble(hrs).ToString("f2")

0

Попробуйте это:

Json(new { data = String.Format("{0.00}",Convert.ToDouble(hrs))}); 
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")) }); 
0

Вы также можете сделать:

return Json(new { data = Convert.ToDouble(hrs).ToString("#.00") }); 
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") }); 
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 }); 

Edit:

Изменено ToString("#.##") к ToString("0.00"). В качестве альтернативы используйте ToString("N2").

Edit # 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") }); 
+0

Извините, что забыл добавить .Sum(), я обновил выше. Я получаю следующую ошибку после добавления ToString ("#. ##"): No Overload for mehtod 'ToString' принимает 1 аргумент – user793468

+0

Обновлен мой ответ выше. Используйте 'ToString (" 0.00 ")' вместо '#' версии. –

+0

Я также думаю, что вы можете избежать группировки 'p.Hours' –