JQuery расчет NaN - PullRequest
       6

JQuery расчет NaN

2 голосов
/ 28 декабря 2010

У меня есть представление, что выводить десятичные значения, которые представляют типы данных денег в базе данных. Для вывода я использую следующий код форматирования

string price = String.Format("{0:f}", (item.Price + item.VAT));

, которые производят строку, подобную этой

12,99 (with comma as the decimal separator)

Я сейчас использую эту строку, чтобы сделать некоторые вычисления на клиенте, используя jQuery

elmProductSelected.children("option").each(function(n) {
    var pIdx = $(this).attr("rel"); 
    var pObj = products.eq(pIdx);
    var pValue = $(this).attr("value");
    var valueArray = pValue.split('|');
    var prdId = valueArray[0];
    var pQty = valueArray[1];
    /* the value of pPrice is 12,99 after the following call */
    var pPrice =  $(pObj).attr(attrProductPrice);
    /* I get NaN here! */
    sTotal = sTotal + ((pPrice - 0) * (pQty - 0));
    cProductCount++;
    cItemCount = cItemCount + (pQty-0);
});

Я получаю NaN прямо на строке, которую я прокомментировал. Я полагаю, что это связано с тем, что значение pPrice использует запятую в качестве десятичного разделителя, потому что, если я вручную установлю его как 12.99, все будет работать.

Есть ли способ прочитать 12,99 как число, используя javascript / jQuery?

Ответы [ 6 ]

3 голосов
/ 28 декабря 2010

Есть две проблемы с кодом.Во-первых, вы должны привести строку к плавающему значению, как предлагает Webnet.Однако функция parseFloat ожидает, что аргумент будет использовать точку в качестве десятичного разделителя.Поэтому следующий код будет делать то, что вы хотите:

var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));

Сначала вы заменяете запятую на точку, а затем конвертируете результат в число с плавающей точкой.

3 голосов
/ 28 декабря 2010

NaN = не число

Используя parseInt, вы можете указать Javascript, что его следует рассматривать как число.

var pPrice = parseInt($(pObj).attr(attrProductPrice));

Вам может понадобиться parseFloat, если вы используете десятичную дробь.

1 голос
/ 28 декабря 2010

попробуйте

var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");
1 голос
/ 28 декабря 2010

Попробуйте это RegEx:

Обновление: изменено выражение, так как я пропустил часть (с запятой в качестве десятичного разделителя).

var pPrice = $(pObj).attr(attrProductPrice)..replace(/(,)(\d+)$/, ".$2").replace(",","")
1 голос
/ 28 декабря 2010

Если это единственный разделитель запятых, который будет (ни один для разделителя тысяч), просто замените его.

var num = parseInt( str.replace( ',', '.' ) ); // or parseFloat

Если есть другие символы, которые мешают правильному синтаксическому анализу, я бы предложил использовать пользовательский атрибут, который хранит недекорированный номер.

<input data-undecorated="123.45" value="123,45" />
var num = parseInt( $('#myInput').data('undecorated') ); // or parseFloat

Вы можете использовать data() таким образом, чтобы получить data- атрибуты, если вы используете jQuery 1.4.3 или более позднюю версию.

0 голосов
/ 28 декабря 2010

Это выглядит следующим образом: Как преобразовать строку в число с плавающей точкой в ​​javascript?

Похоже, вам придется заменить запятую на десятичную.

parseFloat('12, 99'.replace (',', '.'))

...