1

上下文:我正在使用Sortable.

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

经过几次排序(潜水)后,我得到了一些类似的数字,但当我将值发布到控制器(MVC 应用程序)时 0,0023565,它似乎已转换为。0我不想要这个,因为我的代码在几次分割后就不起作用了。我不希望我的数字四舍五入。

4

1 回答 1

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.0123  ->  123456789.0123 
//           123 456 789,0123  ->  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.0123  ->  FormatException 
//           123 456 789,0123  ->  123456789.0123
于 2013-04-02T20:33:45.273 回答