#javascript #html #addition #comma
#javascript #HTML
Вопрос:
Этот код работает; добавление выполняется правильно. Проблема в том, что если я хочу добавить 99000000.00 199000000.00, отображается 298000000.00.
Как я могу сделать так, чтобы 99,000,000.00 199,000,000.00 отображали 298,000,000.00?
Каждый раз, когда я вычисляю числа с запятой, это приводит к NAN / недействительному. Но если я вычисляю числа без запятой, это вычисляется хорошо. Как разрешить запятую в текстовой области / числах, вводимых пользователями, без получения NAN / недопустимого результата?
Пожалуйста, смотрите код, используемый ниже:
HTML-КОД:
<table width="460" border="1">
<tr>
<tr>
<td>SOUTH CLUSTER (391)</td>
<td><input name="scc" type="text" size="25" id="scc" value="0.00"/></div></td>
</tr>
<tr>
<td>CENTRAL CLUSTER(387)</td>
<td><input name="ccc" type="text" size="25" id="ccc" value="0.00" /></div></td>
</tr>
<tr>
<td>NORTH CLUSTER(393)</td>
<td><input name="ncc" type="text" size="25" id="ncc" value="0.00" /></div></td>
</tr>
<tr>
<td >C HUB(390)</td>
<td><input name="vch" type="text" size="25" id="vch" value="0.00"/></div></td>
</tr>
<tr>
<td>CH HUB(397)</td>
<td><input name="mch" type="text" size="25" id="mch" value="0.00"/></div></td>
</tr>
<tr>
<td>NLC HUB(399)</td>
<td><input name="nlch" type="text" size="25" id="nlch" value="0.00"/></div></td>
</tr>
<tr>
<td>SLC HUB(396)</td>
<td><input name="slch" type="text" size="25" id="slch" value="0.00"/></div></td>
</tr>
<tr>
<td>amp;nbsp;</td>
<td>amp;nbsp;</td>
</tr>
<tr>
<td>
<td><div class="style66" align="center"><input type="button" value="ADD" onclick="civ()"></center></td>
</tr>
КОДЫ JAVASCRIPT:
function civ(){
civ1=Number(document.addition.scc.value);
civ2=Number(document.addition.ccc.value);
civ3=Number(document.addition.ncc.value);
civ4=Number(document.addition.vch.value);
civ5=Number(document.addition.mch.value);
civ6=Number(document.addition.nlch.value);
civ7=Number(document.addition.slch.value);
valNum1=Math.floor((civ1 civ2 civ3 civ4 civ5 civ6 civ7)*100)/100;
document.addition.civ123.value=valNum1;
}
Комментарии:
1. Просто удалите запятые из строки перед преобразованием.
2. Пожалуйста, ознакомьтесь с этим , если хотите, чтобы к вам относились серьезно, и узнайте немного о типах данных. Ожидайте, что за вас будут часто голосовать с понижением, пока вы сами не научитесь прилагать немного больше усилий.
3. Я имею в виду, что если вы приложите немного больше усилий, то 1 / вы узнаете больше, 2 / больше людей будут готовы помочь и 3 / вы получите меньше людей, критикующих вас или голосующих против. Все мы с чего-то начинали, но вы узнаете больше, если проведете собственное исследование, например, прочитаете руководства по языку и документацию.
Ответ №1:
Когда у вас есть запятые, это не число (NaN).
Быстрым решением было бы добавить функцию для преобразования их в число
function NumWithComma(num){
return parseInt(num.replace(",",""));
}
затем выполните
civ1 = NumWithComma(document.addition.scc.value);
Это быстрое исправление, на мой взгляд, в том, что вы опубликовали, много чего не так … надеюсь, это как-то поможет
Комментарии:
1. ПРИВЕТ!! ЭТО работает! Он уже разрешает запятую (,)! :)) Если я введу 123 456,00 и 123 234,00 .., то сейчас добавлю! 🙂 Перед тем, как это не bcoz, оно не допускает запятых. ;p Да, спасибо этому! Однако, когда он добавлен, результат не показывает запятую. : (пример: 1,111.00 1,222.00 = 2333.00.. не 2,333.00 : ( Но эй, большое спасибо!
2. не беспокойтесь. Если вы собираетесь использовать именно этот подход, возможно, стоит также поискать пробелы (» «). Кроме того, с помощью быстрого поиска в Google я нашел это mredkj.com/javascript/nfbasic.html Имеет функцию, которая добавляет запятые к числам… может быть полезно
3. Привет, да, neolaser! Большое спасибо. 🙂 Ваши коды работают отлично. 🙂 Я даже не могу сказать им, что мне нужно, или я не могу дать им то, что они хотят видеть, но спасибо, что ПЫТАЕТЕСЬ понять меня. 🙂 Ваши коды потрясающие, и мне больше не нужно беспокоиться, потому что все работает хорошо. ; p Спасибо!!
Ответ №2:
Используйте replace для очистки запятых:
number_with_commas.replace(/,/g, '');
Или очистить все, что не является цифрой или десятичной точкой:
number_with_random_noise.replace(/[^0-9.]/g, '');
Комментарии:
1. Мне нравится твоя вторая идея, убрать все, что тебе не нужно. Хотя, если пользователь вводит что-то вроде «1a2b3» в поле, которое явно предназначено для чисел, я думаю, что, вероятно, лучше выдать ошибку проверки, чем предположить, что они имели в виду «123».
2. Может быть, что-то вроде num=num.replace(/[s,] / g, «); if(num.test(/[^0-9.]/)) { // недопустимое число, сделайте что-нибудь }. Это заменяет любые символы пробела и , но сохраняет остальные нетронутыми.
3. Привет, спасибо thomasa88 и nnnnnn ;)) Это уже закодировано какdfjweiorw и %amp;^amp;**(*() и 123heheh1212 недопустимы. Мои коды принимают только числа.;))
Ответ №3:
Используйте регулярное выражение replace, чтобы удалить все запятые, и parseInt(), чтобы преобразовать результирующую строку в число.
parseInt(yourVariable.replace(/,/g,''),10)
Обратите внимание, что результат все равно может быть неудачным, потому что, очевидно, ваши пользователи могут вводить в поле любую старую чушь. Прочитайте документ о parseInt().
Комментарии:
1. Это поле принимает только числа и .00.. он не принимает asdfghjqwretfjerhkltjert и не принимает !#$%amp;*()))(amp;^^)( :»{ тоже. ;)) Так что, если они собираются добавлять бессмысленные материалы, обязательно, чтобы это было число, а не какая-то ерунда, которую они хотят. Спасибо!
2. Если вы уже проверили формат при вводе, то вы на полпути к этому. Если вы выполняете проверку при вводе ключа или что-то в этом роде, не забудьте разрешить пользователю вставлять недопустимые символы через контекстное меню.
3. Привет, спасибо, nnnnnn ;)) Это уже закодировано какdfjweiorw и т.д. И %amp;^amp;**(*() и 123heheh1212 недопустимы. Мои коды принимают только числа.;))