0

我正在使用jQuery.Calculation 插件计算总计行,但总计忽略了小数点后的所有内容。我怀疑修复存在于正则表达式中,但我不知道在哪里。

以下方法应为欧洲小数设置默认正确值,它适用于行,但计算的 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)
                );
            }
        );

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

4

1 回答 1

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, ".");
  }
})
于 2010-06-22T10:47:14.343 回答