避免在C#中使用小数的默认舍入行为

时间:2013-04-02 19:49:54

标签: c# jquery decimal jquery-ui-sortable

上下文:我正在使用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);
    }

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

1 个答案:

答案 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.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