2016-01-20 5 views
0

У меня есть строка, что я получаю от селектора JQuery .html, который
примернужно просто получить числовое значение из строки

<span class="currency">$</span>"&nbsp;477,000.00" 

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

Я попробовал parseInt, и он возвращает Нан.

Вот мой код для выбора:

Вот мой фактический код:

function getSystemPrice() { 
    var currentSystemPrice = $("#bom-div-content table tbody tr td").html(); 
    currentSystemPrice = parseInt(currentSystemPrice); 
    $("#SYSTEM_PRICE_TILES_ONLY").val(currentSystemPrice); 
} 
+0

Покажите нам свой текущий код. –

+0

'span' закрывается до вывода номера, поэтому вы не получаете значения. Кроме того, вам нужно будет удалить $ anyways, иначе 'NaN' будет результатом разбора. – SaschaM78

+0

Каковы возможные форматы чисел. – Tushar

ответ

3

попробовать:

var string = '<span class="currency">$</span>"&nbsp;477,000.00"'; 
 
var output = parseFloat(string.match(/([\d,.]+\.)/)[1].replace(/,/g, '')); 
 
document.getElementById('output').innerHTML = output;
<div id="output"></div>

UPDATE:

var string = '<span class="currency">$</span>"&nbsp;477,000.00"'; 
 
var string2 = '<span class="currency">$</span>"&nbsp;12.477.000,00"'; 
 
var re = /((?:\d{1,3}[,.]?)+)[,.](\d{2})/; 
 
var m = string.match(re); 
 
var output = document.getElementById('output'); 
 
output.innerHTML += parseFloat(m[1].replace(/[,.]/g, '') + '.' + m[2]) + '\n'; 
 
m = string2.match(re); 
 
output.innerHTML += parseFloat(m[1].replace(/[,.]/g, '') + '.' + m[2]);
<pre id="output"></pre>

Regex объяснение:

  • ( (?: non capturing group \d{1,3} 1 to 3 digits [,.]? optional comma or dot )+ at least one of those ) целое обертывание в скобках, так что захватить всю вещь (номер перед последней запятой или точкой)
  • [,.] последняя запятая или точка (не зафиксировано)
  • (\d{2}) группа захвата t шляпа соответствует последним 2 цифрам
+0

Это будет соответствовать'., 1, .2, .4., ' – Tushar

+0

@Tushar Я предположил, что это имеют действительный номер в html. – jcubic

+0

Будет ли этот код работать, если он был в евро, где бы это было что-то вроде: 477.000,00 –

0

Каковы возможные значения, которые вы получаете? Если вы всегда получаете «$»  , вы можете разбить строку на str.split («;»). Если вы знаете, что номер всегда является последней частью строки, вы должны выбрать символы с конца (с использованием, например, str.slice (-1) и останавливается, когда вы получаете символы, которые не имеют смысла как число.

+0

Номер всегда будет на конец такой, как есть. Единственное, что может измениться, - это и. из-за того, как обрабатывается отображение валюты. –

0

Попробуйте это.

function getSystemPrice() { 
    var currentSystemPrice = $("#bom-div-content table tbody tr td").html(); 
     currentSystemPrice = currentSystemPrice.replace("$",""); //Here you take out the $ 
     currentSystemPrice = currentSystemPrice.replace(" ",""); //Here you take out white spaces 
     currentSystemPrice = parseFloat(currentSystemPrice); //This way you will have decs if its needed 
    $("#SYSTEM_PRICE_TILES_ONLY").val(currentSystemPrice); 
    return true; 
} 
+0

Ваш код будет работать с помощью замены, но, как написано, он не работает для кода, но я мог бы заменить некоторые части строки на «» и перейти к моему номеру с помощью этого метода. –

+0

Какая ошибка вы получаете с помощью этого кода? – kpucha

0

вы хотите, чтобы разобрать число как межд или его float, так как есть два способа сделать это.

Чтобы проанализировать как int, вы должны передать второй аргумент parseInt, radix (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt).

parseInt("10", 10); 

Это связано с тем, что большинство реализаций используют 10 в качестве базового фрейма по умолчанию, но НЕ все, поэтому это может быть тонкий источник ошибок позже по линии.

Принимая JQuery из нее и просто чтение числа в виде строки и преобразования его в поплавок, я сделал так:

var tmp = "<span class='currency'>$</span>&nbsp;477,000.00".split("&nbsp;")[1]; 
parseFloat(tmp.split(",").reduce((a, b) => a + b)); 

Вы могли бы, конечно, использовать ParseInt вместо parseFloat, как описано ранее , в зависимости от точного характера данных, которые вы хотите.

Не уверен, что это решение, которое вы ищете, но я думал, что посмотрю, смогу ли я это сделать, используя сокращение, я не прочь признать, что я тоже кое-что узнал.

Смежные вопросы