2010-06-20 61 views
0

我正在計算與jQuery.Calculation plugin合計的行,但總計忽略了小數點符號後的所有內容。我懷疑修復在於正則表達式,但我無法弄清楚在哪裏。使用jQuery計算歐洲格式的數字的問題

以下方法應該爲歐洲小數設置默認的正確值,它工作的是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總和方法時這出來作爲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) 
       ); 
      } 
     ); 

使用美國編號樣式默認的正則表達式這項工作正確撕開直,但我需要的計算與,工作作爲小數點個符號l

+0

你能舉例說明一些失敗的值嗎? – 2010-06-20 14:32:14

+0

@Pekka一些地方使用逗號,其中美國人(除其他外我肯定)使用句號,反之亦然。因此,對於美國人來說,123,456意味着「十二萬三千四百五十六分之五」,而對歐洲來說意味着「十二萬三千四百五十六分之一」。 (也許你知道,但現在它是在這裏爲所有加入我們的年輕人:-) – Pointy 2010-06-20 15:02:44

+0

@Pointy是的,我意識到這一點,但很好指出。我要求提供一些實際數據,因爲歐洲甚至存在地區差異:例如德國的「123.456」,瑞士的「123'456」......這是一個很長的故事,通常的答案是,儘快轉換成英語儘可能:) – 2010-06-20 15:16:25

回答

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, "."); 
    } 
})