Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с функцией умножения дробные числа (https://javascript.ru/forum/misc/35323-pomogite-s-funkciejj-umnozheniya-drobnye-chisla.html)

wuldemar 07.02.2013 15:26

функция умножения дробные числа
 
Код:

<script language='javascript'>
function do_math(f)
{
        var kolvo = f.elements['kolvo'].value;
          var cena = f.elements['cena'].value;
        var res = parseInt(cena)*parseInt(kolvo);
        f.elements['r'].value = isNaN(res.toPrecision(1)) ? '' : res;


</script>
<form action="" method="post">
  <table border="0" width="400px" align="center">
<tr>
<td width="50%" align="left"><b>Количество:</b><br><br></td>
<td width="50%" align="left">
 <input type="text" name="kolvo" onChange="do_math(this.form)"  size="15" maxlength="10">
  </td>
</tr>
<tr>
<td width="50%" align="left"><b>Цена:</b><br><br></td>
<td width="50%" align="left">
  <input type="text" name="cena" onChange="do_math(this.form)" size="15" maxlength="10" />
  </td>
  </tr>
  <tr>
  <td width="150" align="left"><p>
    <label><b>Всего:</b></label>
  </td>
    <td width="250" align="left">
        <input type="text" name="r"  size="15" maxlength="5" tabindex="4"/>
        </td>
</tr>

</table>
</form>

Работает только с целыми числами, а надо чтоб при умножении 100*0.001 = 0.1 заранее благодарен

Deff 07.02.2013 15:44

<script language='javascript'>
function do_math(f)
{
	var kolvo = f.elements['kolvo'].value;
   	var cena = f.elements['cena'].value;
	var res =cena*parseInt(kolvo);
	f.elements['r'].value = isNaN(res.toPrecision(1)) ? '' : res.toFixed(2);
}  

</script>
<form action="" method="post">
  <table border="0" width="400px" align="center">
<tr>
<td width="50%" align="left"><b>Количество:</b><br><br></td>
<td width="50%" align="left">
 <input type="text" name="kolvo" onChange="do_math(this.form)"  size="15" maxlength="10">
  </td>
</tr>
<tr>
<td width="50%" align="left"><b>Цена:</b><br><br></td>
<td width="50%" align="left">
  <input type="text" name="cena" onChange="do_math(this.form)" size="15" maxlength="10" />
  </td>
  </tr>
  <tr>
  <td width="150" align="left"><p>
    <label><b>Всего:</b></label>
  </td>
    <td width="250" align="left">
	<input type="text" name="r"  size="15" maxlength="5" tabindex="4"/> 
	</td>
</tr>

</table>
</form>

wuldemar 07.02.2013 15:56

Спасибо

рони 07.02.2013 16:03

wuldemar,
parseInt округляет дробные числа, т.к останавливается на десятичной точке.
function do_math(f)
{
	var kolvo = +f.elements['kolvo'].value;
   	var cena = +f.elements['cena'].value;
    var res =  kolvo *  cena
    f.elements['r'].value = isNaN(res.toPrecision(1)) ? '' : res;
}

рони 07.02.2013 16:07

Цитата:

Сообщение от Deff
res//.replace(/(\.\d{2}.)*$/,'$1')

toFixed уже некатит?

Hoshinokoe 07.02.2013 16:15

wuldemar,

Использовать parseFloat религия не позволяет ?

wuldemar 07.02.2013 16:18

Еще маленькая проблемка с запятой (0,1) не считает и выводит после запятой 0.1 вместо 0.10

wuldemar 07.02.2013 16:19

Цитата:

Сообщение от Hoshinokoe (Сообщение 232306)
wuldemar,

Использовать parseFloat религия не позволяет ?

я не волшебник, только учусь

рони 07.02.2013 16:21

wuldemar, res.toFixed(2)
alert(.1.toFixed(2))

wuldemar 07.02.2013 16:43

function do_math(f)
{
var kolvo = f.elements['kolvo'].value;
var cena = f.elements['cena'].value;
var res =cena*parseInt(kolvo);
f.elements['r'].value = isNaN(res.toPrecision(1)) ? '' : res.toFixed(2);
}
Все спасибо работает норм!


Часовой пояс GMT +3, время: 00:53.