Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   мини калькулятор (https://javascript.ru/forum/jquery/70092-mini-kalkulyator.html)

Nexus 09.08.2017 15:43

Цитата:

Сообщение от ksa
Так он же напрашивается!

Конкретно для этой задачи цикл вовсе не обязателен, я так считаю.

biben, у тебя в коде логическая ошибка связанная с переменной «а», найди её.


Решение твоей задачи с циклом:
// [url]https://jsfiddle.net/sza10bke/[/url] 
$(function(){
	function count(){
		var data={
				2000:1.5,
				5000:1.3,
				30000:1
			},
			sum=+$("#count_inp").val() || 0,
			result=false;
		
		for(var val in data){
			if(data.hasOwnProperty(val) && sum>=val)
				result=data[val]*sum;
		};
		
		$("#result p").html(result===false?'Укажите расстояние':result+' Рублей');
	};
	var s=$("#process_all_b");
	s.click(count);
});

j0hnik 09.08.2017 15:47

<htm>
<head>
</head>
<body>
	<div id="calc_div">

		<div id="quantity_div"><p class="c">
			Сколько километров <br>
			<input type="text" id="count_inp" value="0"><br>
		</div>

		<div id="final_div">
			<p class="c"><button id="process_all_b" >Посчитать</button><br></p>
			<div id="result"><p class="c">Укажите расстояние</p></div>
		</div>
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script>

		$(function() {
			$("#process_all_b").click(function(){
				var sum = $("#count_inp").val(), k = [1.5, 1.3, 1, 0.8], r = [0, 2000, 5000, 30000],  i = k.length ;
				while(i--) if (sum >= r[i]) {
					sum *= k[i];
					 break;
					}
				$("#result p").html(sum.toFixed(0)+' Рублей');
			});
		});

	</script>
</body>
</html>

ksa 09.08.2017 15:54

Цитата:

Сообщение от Nexus
Конкретно для этой задачи цикл вовсе не обязателен, я так считаю.

Дело твое... :)

ksa 09.08.2017 15:56

Цитата:

Сообщение от j0hnik
k = [1.5, 1.3, 1, 0.8], r = [0, 2000, 5000, 30000];

Массив объектов был бы более гармоничен... ;)

Nexus 09.08.2017 15:57

После кода j0hnik я понял, что у меня в коде в объекте «data» не хватает свойства «0» со значением 2.
А у j0hnik в коде я бы переменную «i» объявил самой последней и значение ей установил бы как «k.length». + условие немного некорректное, у автора сравнение идет «больше или равно», а не строго «больше». Также отсутствует проверка на корректность введенных данных, к примеру если ввести отрицательное число, то...

ksa 09.08.2017 15:58

Цитата:

Сообщение от Nexus
var data={
                2000:1.5,
                5000:1.3,
                30000:1
            }

Это опасная практика. :(
"Изготовитель" не гарантирует "правильность" сортировки ключей в объекте. Для правильного 100%-ного порядка следования нужно использовать массив. ;)

Nexus 09.08.2017 15:59

Цитата:

Сообщение от ksa (Сообщение 461112)
Дело твое... :)

На самом деле это дело автора)

Nexus 09.08.2017 16:01

Цитата:

Сообщение от ksa (Сообщение 461115)
Это опасная практика. :(
"Изготовитель" не гарантирует "правильность" сортировки ключей в объекте. Для правильного 100%-ного порядка следования нужно использовать массив. ;)

Ошибки в любом случае не будет, хоть как расставляй ключи, т.к. цикл не разрывается на первом фейле.

UPD. Затупил, ошибка возможна :)

ksa 09.08.2017 16:02

Цитата:

Сообщение от Nexus
цикл не разрывается на первом фейле

Зачем делать лишние итерации? :blink:

ksa 09.08.2017 16:04

Цитата:

Сообщение от Nexus
На самом деле это дело автора)

Тогда уже его "работодателя"... :D
Т.к. не каждого устроит индусский код


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