2013-04-02 3 views
1

Контекст: Я занимаюсь сортировкой с использованием Sortable.Избегать поведения округления по умолчанию с десятичными знаками в C#

$("#sortable").sortable({ 
     update: function (e,ui) 
     { 
     nextItemPrio=parseFloat(ui.item.next().find("input[name='Priority']").val().replace(",", ".")); 
     prevItemPrio = parseFloat(ui.item.prev().find("input[name='Priority']").val().replace(",", ".")); 
     currentItemPrio = parseFloat(ui.item.find("input[name='Priority']").val().replace(",", ".")); 
        if ((nextItemPrio < currentItemPrio && prevItemPrio < currentItemPrio) 
      || (nextItemPrio > currentItemPrio && prevItemPrio > currentItemPrio)) { 

        ui.item.find("input[name='Priority']").val((prevItemPrio + nextItemPrio)/2.0); 


       } 

В контроллере у меня есть:

public ActionResult UpdatePicturePriority(int id, string newpriority) 
     { 
     var a = _PictureRepo.GetById(id); 
     decimal convertDecimal = Convert.ToDecimal(newpriority.Replace(".", ","),); 
     a.Priority = convertDecimal; 
     _PictureRepo.Update(a); 
     return Json(true); 
    } 

После нескольких сортировок (водолазных), я получаю некоторое число, как 0,0023565 но мне кажется, что преобразование в 0 когда я отправляю значение для контроллера (приложение MVC). Я не хочу этого, потому что мой код не работает после нескольких разделов. Я не хочу, чтобы мои номера округлялись.

+0

Кажется, что ваша проблема заключается в jQuery, а не в контроллере. Где вы теряете точность? –

+0

Если я console.log результаты, я получаю что-то вроде 0.00055, но когда я обновляю страницу (получаю результаты из базы данных), я получаю 0. Контроллер получает значение: 0.00055 –

+0

Хм, казалось бы, проблема в том, что вы теряете точность в ваше обновление базы данных. Вы подтвердили, что ценность - это то, что вы ожидаете в своей базе данных? –

ответ

1

Похоже, что десятичное преобразование не работает в вашем контроллере.

decimal convertDecimal = Convert.ToDecimal(newpriority.Replace(".", ","),); 

Вы заменяете десятичную запятую (.) Запятой (,) в строке вышеприведенного кода. Что является причиной этого?

Метода Convert.ToDecimal по умолчанию будет 0, если преобразование не может быть сделана, следовательно, причина 0.

здесь является примером из Microsoft, либо изменить поставщик формата или использовать десятичное по умолчанию места в (.)

using System; 
using System.Globalization; 

public class Example 
{ 
    public static void Main() 
    { 
     string[] values = { "123456789", "12345.6789", "12 345,6789", 
          "123,456.789", "123 456,789", "123,456,789.0123", 
          "123 456 789,0123" }; 
     CultureInfo[] cultures = { new CultureInfo("en-US"), 
           new CultureInfo("fr-FR") }; 

     foreach (CultureInfo culture in cultures) 
     { 
     Console.WriteLine("String -> Decimal Conversion Using the {0} Culture", 
          culture.Name); 
     foreach (string value in values) 
     { 
      Console.Write("{0,20} -> ", value); 
      try { 
       Console.WriteLine(Convert.ToDecimal(value, culture)); 
      } 
      catch (FormatException) { 
       Console.WriteLine("FormatException"); 
      } 
     } 
     Console.WriteLine(); 
     }      
    } 
} 
// The example displays the following output: 
//  String -> Decimal Conversion Using the en-US Culture 
//     123456789 -> 123456789 
//     12345.6789 -> 12345.6789 
//    12 345,6789 -> FormatException 
//    123,456.789 -> 123456.789 
//    123 456,789 -> FormatException 
//   123,456,789.-> 123456789.
//   123 456 789,-> FormatException 
//   
//  String -> Decimal Conversion Using the fr-FR Culture 
//     123456789 -> 123456789 
//     12345.6789 -> FormatException 
//    12 345,6789 -> 12345.6789 
//    123,456.789 -> FormatException 
//    123 456,789 -> 123456.789 
//   123,456,789.-> FormatException 
//   123 456 789,-> 123456789.
+0

Кажется, что проблема заключается в том, что вы теряете точность. Например, если я получаю 3.62255 в базе данных, у меня есть только 3,62 –

+0

. Когда вы отлаживаете контроллер, вы получаете ожидаемые результаты в ** конвертируемой конвертируемой ** переменной? – RedJandal

+0

Да, я получаю ожидаемый результат –

Смежные вопросы