使用带有欧洲格式数字的jQuery计算的问题

时间:2010-06-20 14:31:19

标签: jquery regex jquery-calculation

我正计算总计为jQuery.Calculation plugin的行,但总计忽略小数点后的所有内容。我怀疑修复在于正则表达式,但我无法弄清楚在哪里。

以下方法应设置欧洲小数的默认正确,它适用于pr行,但计算的sum方法忽略十进制数。下面的正则表达式是官方发布的修复程序,但它仍然无法正常工作。

$.Calculation.setDefaults({
    reNumbers: /(-|-\$)?(\d+(.\d{3})*(\,\d{1,})?|\.\d{1,})/g
, cleanseNumber: function (v) {
    return v.replace(/[^0-9,\-]/g, "").replace(/,/g, ".");
}
});

实施例: 7834,45 * 1为该行给出了正确的7834,45之和,但是在使用jQuery.Calculation sum方法计算总数时,它出现为7834,没有小数

以下是计算总数的代码,或多或少直接从示例

中删除
$("[id^=total_umva_item_]").calc(
    // the equation to use for the calculation
            "qty * price",
    // define the variables used in the equation, these can be a jQuery object
            {
            qty: $("input[name^=antall_]"),
            price: $("input[name^=price_]")
        },
    // define the formatting callback, the results of the calculation are passed to this function
            function (s) {
                // return the number as a dollar amount
                return "kr " + s.toFixed(2);
            },
    // define the finish callback, this runs after the calculation has been complete
            function ($this) {
                // sum the total of the $("[id^=total_item]") selector
                var sum = $this.sum(); <- The sum is calculated without decimals
                $("#invoice-totals-net").text(
                    "kr " + sum.toFixed(2)
                );
            }
        );

使用美国数字样式的默认正则表达式,这可以正常工作,但我需要使用,计算作为小数符号

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。我联系了作者,他告诉我以下默认值。您需要注意的是,总计是通过对行总计求和来计算的,所以要小心打印行总计中的正确小数符号。

$.Calculation.setDefaults({
  // a regular expression for detecting European-style formatted numbers

  reNumbers: /(-|-\$)?(\d+(\.\d{3})*(\,\d{1,})?|\,\d{1,})?/g
  // define a procedure to convert the string number into an actual usable number
  , cleanseNumber: function (v){
     // cleanse the number one more time to remove extra data (like commas and dollar signs)
     // use this for European numbers: v.replace(/[^0-9,\-]/g, "").replace(/,/g, ".")

     return v.replace(/[^0-9,\-]/g, "").replace(/,/g, ".");
  }
})