2010-06-20 3 views
0

Я вычисляю строки с итогом jQuery.Calculation plugin, но общее количество игнорируется после десятичного символа. Я подозреваю, что исправление лежит в регулярном выражении, но я не могу понять, где.Проблема с использованием вычисления jQuery с номерами в европейском формате

Следующий метод должен установить правильное значение по умолчанию для европейских десятичных знаков, оно работает pr row, но метод 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

Можете ли вы показать некоторые примеры значений, которые терпят неудачу? –

+0

@Pekka В некоторых местах используются запятые, где американцы (в частности, я уверен) используют периоды, и наоборот. Таким образом, для американца 123 456 означает «сто двадцать три тысячи четыреста пятьдесят шесть», а для европейца это означает «сто двадцать три и четыреста пятьдесят шесть тысячных». (Наверное, вы это знаете, но теперь здесь для всех молодых людей, присоединяющихся к нам :-) – Pointy

+0

@ Великолепно, да, я знаю об этом, но хорошо указать. Я запрашивал некоторые фактические данные, так как в Европе существуют даже региональные различия: «123.456» в Германии, например, 123'456' в Швейцарии ... Это долгая история, и обычный ответ заключается в том, чтобы перевести на английский язык как можно скорее насколько возможно :) –

ответ

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, "."); 
    } 
}) 
Смежные вопросы