Простые дополнительные проблемы JavaScript

Это может быть достаточно для большинства целей, но не оптимально.

#!/bin/bash

n=0
maxjobs=10

for i in *.m4a ; do
    # ( DO SOMETHING ) &

    # limit jobs
    if (( $(($((++n)) % $maxjobs)) == 0 )) ; then
        wait # wait until all have finished (not optimal, but most times good enough)
        echo $n wait
    fi
done
8
задан SoulieBaby 5 June 2009 в 11:56
поделиться

10 ответов

Вам необходимо преобразовать ваши значения в число с плавающей запятой, прежде чем добавлять их:

var totalVal = parseFloat(postage) + parseFloat(subtotal);

РЕДАКТИРОВАТЬ: Вот полный пример, который включает проверку на NaN:

function calculateTotal() {

    var postageVal = document.getElementById('postage').value; //$68.50
    var subtotalVal = document.getElementById('subtotal').value; //$378.00

    var postage = parseFloat(postageVal.substr(1)); //68.50
    var subtotal = parseFloat(subtotalVal.substr(1)); //378.00
    var postageAsFloat = isNaN(postage) ? 0.0 : postage;
    var subtotalAsFloat = isNaN(subtotal) ? 0.0 : subtotal;
    var totalVal = postageAsFloat + subtotalAsFloat;

    alert(postage);
    alert(subtotal);
    alert(totalVal);

};
27
ответ дан 5 December 2019 в 04:35
поделиться

Попробуйте преобразовать числа в числа с плавающей запятой:

function calculateTotal() {

    var postageVal = document.getElementById('postage').value; //$68.50
    var subtotalVal = document.getElementById('subtotal').value; //$378.00

    var postage = parseFloat(postageVal.substr(1)); //68.50
    var subtotal = parseFloat(subtotalVal.substr(1)); //378.00
    var totalVal = postage+subtotal;

    alert(postage);
    alert(subtotal);
    alert(totalVal);

};
9
ответ дан 5 December 2019 в 04:35
поделиться

У всех остальных правильная идея с parseFloat .

Я просто хотел упомянуть, что предпочитаю очищать числовые значения, как это (в отличие от анализа с помощью substr ):

var postageVal = document.getElementById('postage').value; //$68.50

var postage = parseFloat(postageVal.replace(/[^0-9.]/g, '')); 

Этот вызов замены удалит все символы из строки , кроме 0-9 и . (период). Не / g в конце регулярного выражения. Это важно, потому что без него будет заменено только первое совпадающее вхождение.

4
ответ дан 5 December 2019 в 04:35
поделиться

parseFloat делает свое дело.

var postage = parseFloat(postageVal.substr(1));
var subtotal = parseFloat(subtotalVal.substr(1));
3
ответ дан 5 December 2019 в 04:35
поделиться

Он обрабатывает почтовые расходы и промежуточные итоги как строки и объединяет их. Вы можете попробовать что-то вроде этого:

var totalVal = 0+postage+subtotal;

Это должно принудительно переключить его в числовой режим.

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

2
ответ дан 5 December 2019 в 04:35
поделиться

Сначала нужно разобрать число. Это должно сработать.

function calculateTotal() {

    var postageVal = document.getElementById('postage').value; //$68.50
    var subtotalVal = document.getElementById('subtotal').value; //$378.00

    var postage = parseFloat( postageVal.substr(1) ); //68.50
    var subtotal = parseFloat( subtotalVal.substr(1) ); //378.00
    var totalVal = postage+subtotal;

    alert(postage);
    alert(subtotal);
    alert(totalVal);

};
1
ответ дан 5 December 2019 в 04:35
поделиться

Я не тестировал ваш код, поэтому могут быть другие проблемы, но приведенное ниже исправление с использованием parseFloat должно остановить конкатенацию и сложить числа.

function calculateTotal() {

    var postageVal = document.getElementById('postage').value; //$68.50
    var subtotalVal = document.getElementById('subtotal').value; //$378.00

    var postage = postageVal.substr(1); //68.50
    var subtotal = subtotalVal.substr(1); //378.00
    var totalVal = parseFloat(postage)+parseFloat(subtotal);

    alert(postage);
    alert(subtotal);
    alert(totalVal);

};
1
ответ дан 5 December 2019 в 04:35
поделиться

Спасибо за все ответы! Я попробую их, я уверен, что они лучше моего решения:

<script type="text/javascript">
function calculateTotal() {

   var postageVal = document.cart.postage.value;
   var subtotalVal = document.cart.subtotal.value;

   var postage = postageVal.substr(1);
   var subtotal = subtotalVal.substr(1);
   var totalVal = Number(postage)+Number(subtotal);

   document.cart.total.value = "$"+totalVal.toFixed(2);

};
</script>
0
ответ дан 5 December 2019 в 04:35
поделиться

Унарный плюс должен работать:

var totalVal = (+postage) + (+subtotal);

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

var postage = +postageVal.substr(1); //68.50
var subtotal = +subtotalVal.substr(1); //378.00
var totalVal = postage+subtotal;
1
ответ дан 5 December 2019 в 04:35
поделиться

Столкнувшись с такой же проблемой, я изучил функции JS parseFloat и parseInt и обнаружил, что они плохо разработаны.

Итак, поэтому Я предотвращаю всю проблему, умножая значение элемента на * 1 перед их добавлением. Это заставляет JS обрабатывать результат как числовой, даже если значение было пустым, чтобы его можно было правильно обработать. Таким образом:

var TEMP = (1 * el_1.value) + (1 * el_2.value);
document.getElementById("el_tot").value = TEMP;

Предположим, вы видите, что «el_1» и другие - это имена полей в форме.

1
ответ дан 5 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: