Javascript международных расчетов? - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть функция javascript, которая получает три значения из текстовых полей в форме, суммирует их и отображает сумму в форме:

function sumVals(theForm) {
    var sum = 0.0;
    sum += parseFloat(theForm.val01.value);
    sum += parseFloat(theForm.val02.value);
    sum += parseFloat(theForm.val03.value);
    theForm.sumvals.value = sum.toNiceFixed(4);
}

Функция отлично работает на любом компьютере с английской ОС. Например, если я введу значения 0,2, 0,4 и 0,4 для val01, val02 и val03 в форме, в поле sumvals отображается 1.000

Однако на компьютере с итальянской или немецкой ОС, если я введу в форму те же значения 0,2, 0,4 и 0,4 для val01, val02 и val03, в поле sumvals отображается 10000.000

Я думаю, это как-то связано с тем, что некоторые неанглийские ОС интерпретируют точки и запятые в числах. Однако, если я попытаюсь заменить запятые на периоды, когда я введу значения в текстовое поле (например, 0,4), тогда поле переключится на 0, как только я уберу фокус с него.

Я проверил несколько сайтов, посвященных i18n, для javascript, но я не могу найти ничего, что связано с этим конкретным вопросом, или, по крайней мере, я не распознал его как таковой.

Может кто-нибудь помочь мне с обходным решением, которое легко интерпретирует переменные javascript на родном языке операционной системы (если это действительно проблема)?

1 Ответ

1 голос
/ 19 ноября 2011
function toFloat(value) {
  return parseFloat(value.replace(',','.'));
}
function sumVals(theForm) {
  var sum = 0.0;
  sum += toFloat(theForm.val01.value);
  sum += toFloat(theForm.val02.value);
  sum += toFloat(theForm.val03.value);
  theForm.sumvals.value = sum.toNiceFixed(4);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...