Это может быть достаточно для большинства целей, но не оптимально.
#!/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
Вам необходимо преобразовать ваши значения в число с плавающей запятой, прежде чем добавлять их:
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);
};
Попробуйте преобразовать числа в числа с плавающей запятой:
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);
};
У всех остальных правильная идея с parseFloat .
Я просто хотел упомянуть, что предпочитаю очищать числовые значения, как это (в отличие от анализа с помощью substr ):
var postageVal = document.getElementById('postage').value; //$68.50
var postage = parseFloat(postageVal.replace(/[^0-9.]/g, ''));
Этот вызов замены удалит все символы из строки , кроме 0-9 и . (период). Не / g в конце регулярного выражения. Это важно, потому что без него будет заменено только первое совпадающее вхождение.
parseFloat делает свое дело.
var postage = parseFloat(postageVal.substr(1));
var subtotal = parseFloat(subtotalVal.substr(1));
Он обрабатывает почтовые расходы и промежуточные итоги как строки и объединяет их. Вы можете попробовать что-то вроде этого:
var totalVal = 0+postage+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 totalVal = postage+subtotal;
alert(postage);
alert(subtotal);
alert(totalVal);
};
Я не тестировал ваш код, поэтому могут быть другие проблемы, но приведенное ниже исправление с использованием 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);
};
Спасибо за все ответы! Я попробую их, я уверен, что они лучше моего решения:
<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>
Унарный плюс должен работать:
var totalVal = (+postage) + (+subtotal);
Но вы, вероятно, предполагали, что ваши почтовые расходы и промежуточные итоги должны быть числами, а не строками, поэтому ...
var postage = +postageVal.substr(1); //68.50
var subtotal = +subtotalVal.substr(1); //378.00
var totalVal = postage+subtotal;
Столкнувшись с такой же проблемой, я изучил функции JS parseFloat
и parseInt
и обнаружил, что они плохо разработаны.
Итак, поэтому Я предотвращаю всю проблему, умножая значение элемента на * 1
перед их добавлением. Это заставляет JS обрабатывать результат как числовой, даже если значение было пустым, чтобы его можно было правильно обработать. Таким образом:
var TEMP = (1 * el_1.value) + (1 * el_2.value);
document.getElementById("el_tot").value = TEMP;
Предположим, вы видите, что «el_1» и другие - это имена полей в форме.