 
			
				07.01.2013, 19:09
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.03.2012 
					
					
					
						Сообщений: 1,808
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Злые числа с плавающей точкой
			 
			
		
		
		
		Доброго времени суток!   
Раньше не особо обращал внимание на эту проблему, а сейчас приспичило. 
в общем вот в чем проблема:
 
Есть целое число, от него нужно всегда отнимать 0.1 когда происходит какое либо событие.
 
Допустим есть число 10. Когда происходит событие в первый раз джска отнимает 0.1 и получается 9.9 Но когда событие поворяется, js отнимает уже не 0.1 а 1, тоесть было 9.9 а стало 8.9 и т.д 
Подскажите пожалуйста как с этим бороться  
		
	
		
		
		
		
		
			
				__________________ 
				Научу себя плохому  
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 19:28
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 26.03.2012 
					
					
					
						Сообщений: 823
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Округляй числа до целого, выполняй действия с целыми числами, и снова приводи в дробное! 
http://learn.javascript.ru/number#неточные-вычисления 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось dmitry111, 07.01.2013 в 19:38.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 19:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 без статуса 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.05.2012 
					
					
					
						Сообщений: 8,219
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
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))
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Deff, 07.01.2013 в 20:44.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 19:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.03.2012 
					
					
					
						Сообщений: 1,808
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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 утра, так что немного странноват)  
		
	
		
		
		
		
		
			
				__________________ 
				Научу себя плохому  
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 19:47
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от l-liava-l
			
		
	 | 
 
	
		Есть целое число, от него нужно всегда отнимать 0.1 когда происходит какое либо событие. 
 
Допустим есть число 10. Когда происходит событие в первый раз джска отнимает 0.1 и получается 9.9 Но когда событие поворяется, js отнимает уже не 0.1 а 1, тоесть было 9.9 а стало 8.9 и т.д
	 | 
 
	
 
 писать алгоритмы правильно, а не обвинять в своих ошибках язык  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 19:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.03.2012 
					
					
					
						Сообщений: 1,808
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		писать алгоритмы правильно, а не обвинять в своих ошибках язык
	 | 
 
	
 
 А кто его обвинял? я лишь интересуюсь как справиться с невзгодами)  
		
	
		
		
		
		
		
			
				__________________ 
				Научу себя плохому  
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 20:01
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.03.2012 
					
					
					
						Сообщений: 1,808
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Deff, что то я косячу, получается тоже самое 
		
	
		
		
		
		
		
			
				__________________ 
				Научу себя плохому  
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 20:05
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 без статуса 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.05.2012 
					
					
					
						Сообщений: 8,219
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от l-liava-l
			
		
	 | 
 
	| 
		Deff, что то я косячу, получается тоже самое
	 | 
 
	
 
 Поправил  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 20:45
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.03.2012 
					
					
					
						Сообщений: 1,808
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
<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 
клацнуть по нижнему -  
		
	
		
		
		
		
		
			
				__________________ 
				Научу себя плохому  
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось l-liava-l, 07.01.2013 в 20:47.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.01.2013, 20:47
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 без статуса 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.05.2012 
					
					
					
						Сообщений: 8,219
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от l-liava-l
			
		
	 | 
 
	| 
		Один в один старая проблема, вроде все так. Заметил что value из инпута забирается неправильно, например если было 1.99 то забирается 1.000...01
	 | 
 
	
 
 Забивай как строку - затем parseFloat  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |