Злые числа с плавающей точкой
Доброго времени суток!:)
Раньше не особо обращал внимание на эту проблему, а сейчас приспичило. в общем вот в чем проблема: Есть целое число, от него нужно всегда отнимать 0.1 когда происходит какое либо событие. Допустим есть число 10. Когда происходит событие в первый раз джска отнимает 0.1 и получается 9.9 Но когда событие поворяется, js отнимает уже не 0.1 а 1, тоесть было 9.9 а стало 8.9 и т.д Подскажите пожалуйста как с этим бороться |
Округляй числа до целого, выполняй действия с целыми числами, и снова приводи в дробное!
http://learn.javascript.ru/number#неточные-вычисления |
function Itog(i,N,Numb,Delta){ var a = parseFloat((Numb - i*Delta).toFixed(N)); return a; } var Delta=0.01; // Delta - Константа уменьшения var Numb=10.0000000001;//Изначальное неизменяемое число var N =3 // Max-число знаков после запятой var i=7; // i - кол-во вычитаний из начального alert(Itog(i,N,Numb,Delta)) |
dmitry111,да я всегда так и делал, дело в том, что есть два инпута к каждому инпуту по 2 кнопки.
+ и - В 1 инпуте и считаем и отправляем все в секундах тоесть как было 25 секунд или 40 секунд, так обработчику и отправляем. А во 2 инпуте работа отображаться должна в 10 долях секунд (например 3.2 или 3.6), а отправлятся целым числом, например если было 3.6 то обработчику отправляем 36. Вобщем точка только для человека. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> * { margin:0; padding:0; } body { background:#393939; color:#FFF; } form { margin:50px 0 0; } label { display:block; float:left; text-align:right; width:140px; padding:5px 10px 0 0; } input[type=text] { float:left; width:40px; font:bold 20px Helvetica, sans-serif; text-align:center; padding:3px 0 0; } form div { overflow:hidden; margin:0 0 5px; } #submit { border:1px solid #000; background:#eee; margin:15px 0 0 175px; padding:5px 10px 3px; } #submit:hover { background:#ccc; } .incdec li { float:left; width:30px; height:25px; background:#f7f7f7; text-align:center; padding-top:8px; color:#000; list-style:none; margin-left:5px; cursor:pointer; border:1px solid #777; } .incdec li:active { border:#000; } </style> <script type="text/javascript"> function incDec(i) { document.onmousedown = function(){return false} if(i < 0) { i = -i; var valuE = parseInt(document.getElementById('valu'+i).value); if(valuE-1 < 0) {}else{ document.getElementById('valu'+i).value = valuE - 1; } } else { var valuE = parseInt(document.getElementById('valu'+i).value); document.getElementById('valu'+i).value = valuE + 1; } } </script> <form id="forms" method="post" action=""> <div> <label for="name">включение</label> <input type="text" id="valu1" value="2"/> <ul class="incdec"> <li onclick="incDec(1)">+</li> <li onclick="incDec(-1)">-</li> </ul> </div> <div> <label for="name">работа</label> <input type="text" name="turtle-doves" id="valu2" value="2"/> <ul class="incdec"> <li onclick="incDec(2)">+</li> <li onclick="incDec(-2)">-</li> </ul> </div> <input type="submit" value="Ok" id="submit" /> </form> Зы код писался в 4 утра, так что немного странноват) |
Цитата:
|
Цитата:
|
Deff, что то я косячу, получается тоже самое
|
Цитата:
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> * { margin:0; padding:0; } body { background:#393939; color:#FFF; } form { margin:50px 0 0; } label { display:block; float:left; text-align:right; width:140px; padding:5px 10px 0 0; } input[type=text] { float:left; width:40px; font:bold 20px Helvetica, sans-serif; text-align:center; padding:3px 0 0; } form div { overflow:hidden; margin:0 0 5px; } #submit { border:1px solid #000; background:#eee; margin:15px 0 0 175px; padding:5px 10px 3px; } #submit:hover { background:#ccc; } .incdec li { float:left; width:30px; height:25px; background:#f7f7f7; text-align:center; padding-top:8px; color:#000; list-style:none; margin-left:5px; cursor:pointer; border:1px solid #777; } .incdec li:active { border:#000; } </style> <script type="text/javascript"> function incDec(i) { document.onmousedown = function(){return false} if(i < 0) { i = -i; var valuE = parseInt(document.getElementById('valu'+i).value); if('valu'+i == 'valu2') { ///////////////////////// function Itog(y,N,Numb,Delta){ var a = parseFloat((Numb - y*Delta).toFixed(N)); return a; } var Numb=valuE+0.0000000001; var Delta=0.01; var y=0; var N =3; alert(Numb +'- это numb'); alert(Itog(1,N,Numb,Delta) + '- это результат'); document.getElementById('valu'+i).value = Itog(1,N,Numb,Delta); /////////////////////////////////////////////////// } if(valuE-1 < 0) {}else{ //document.getElementById('valu'+i).value = valuE - 1; } } else { var valuE = parseInt(document.getElementById('valu'+i).value); document.getElementById('valu'+i).value = valuE + 1; } } </script> <form id="forms" method="post" action=""> <div> <label for="name">включение</label> <input type="text" id="valu1" value="2"/> <ul class="incdec"> <li onclick="incDec(1)">+</li> <li onclick="incDec(-1)">-</li> </ul> </div> <div> <label for="name">работа</label> <input type="text" name="turtle-doves" id="valu2" value="2"/> <ul class="incdec"> <li onclick="incDec(2)">+</li> <li onclick="incDec(-2)">-</li> </ul> </div> <input type="submit" value="Ok" id="submit" /> </form> Один в один старая проблема, вроде все так. Заметил что value из инпута забирается неправильно, например если было 1.99 то забирается 1.000...01 клацнуть по нижнему - |
Цитата:
|
УРРРРААА)))
косячил из за parseInt -a Deff Благодарю! |
Часовой пояс GMT +3, время: 06:34. |