Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Калькулятор - числа с запятой/точкой (https://javascript.ru/forum/misc/70105-kalkulyator-chisla-s-zapyatojj-tochkojj.html)

MC-XOBAHCK 10.08.2017 15:50

Калькулятор - числа с запятой/точкой
 
Не пинайте жёстко - первый пост. Мне нужен JavaScript и чтобы его освоить нужна помощь на этом форуме. Надеюсь быстро освою форум и буду делать в дальнейшем всё правильно, согласно установленным обычаям.

Пишу калькулятор. Подключена jQuery.
Не могу разобраться: проблема чтобы сделать возможность ввода чисел с сотыми (два знака после запятой).

Код HTML:
<div>
<h4>Прямоугольник</h4>
<p>Длина прямоугольника: <input id="val_a" type="number" step="0.01" min="0.01" /></p>
<p>Ширина прямоугольника: <input id="val_b" type="number" step="any" min="0.01"/></p>
<div>Площадь прямоугольника:<span id="pls"></span> м.кв.</div>
</div>


Скрипт:
var a, b;
		
	a = $('#val_a').val();	//Длина прямоугольника
	b = $('#val_b').val();	//Ширина прямоугольника
		
	a = parseInt(a);
	b = parseInt(b);
		
	pl_s = a * b;	//Площадь
		
	$('#pls').html(pl_s);


У меня получается parseInt игнорирует при расчёте знаки после точки или запятой.
А если убираю parseInt - то мозила не пропускает ввод чисел с точкой.

Хотелось бы чтобы была возможность использования как точки так и запятой.
Можете подсказать или подправить?

j0hnik 10.08.2017 15:55

нужен не parseInt a parseFloat

https://developer.mozilla.org/ru/doc...cts/parseFloat

j0hnik 10.08.2017 16:04

<html>
<head>
</head>
<body>
	<div>
		<h4>Прямоугольник</h4>
		<p>Длина прямоугольника: <input id="val_a" type="number" step="0.01" min="0.01" /></p>
		<p>Ширина прямоугольника: <input id="val_b" type="number" step="0.01" min="0.01"/></p>
		<div>Площадь прямоугольника:<span id="pls"></span> м.кв.</div>
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script>

		$('input').on('input', function(){
			var a, b;
	a = $('#val_a').val();	//Длина прямоугольника
	b = $('#val_b').val();	//Ширина прямоугольника
	
	a = parseFloat(a);
	b = parseFloat(b);
	
	pl_s = a * b;	//Площадь
	
	$('#pls').html(pl_s);
});
		
</script>
</body>
</html>

MC-XOBAHCK 10.08.2017 16:38

Спасибо! Теперь считает с дробными числами.

Остаётся вопрос с мазилой, она не хочет пропускать дроби через точку (хром работает как с точкой так и с запятой).
Нет ли способа подружить и мазилу с точкой? Или делать подсказку о вводе через запятую и рекомендацией на использование хром-браузера?

laimas 10.08.2017 16:38

Для данной операции и parseFloat() не потребуется, уж тогда проверять что возвращает parseFloat(), иначе ни к чему.

alert('0.5' * '0.7')

laimas 10.08.2017 16:39

Цитата:

Сообщение от MC-XOBAHCK
Остаётся вопрос с мазилой, она не хочет пропускать дроби через точку

Не наоборот ли?

MC-XOBAHCK 10.08.2017 16:51

Цитата:

Сообщение от laimas (Сообщение 461253)
Не наоборот ли?

Нет.
Хром работает как с точкой так и с запятой, а мазила если цифра с точкой подсвечиваем красным input и в результат ставит 0. Запятую обрабатывает правильно.

laimas 10.08.2017 17:03

Цитата:

Сообщение от MC-XOBAHCK
Хром работает как с точкой так и с запятой

А, речь о формате ввода в поле. :) Это локаль, и ввод значит по ней, тут ничего не попишешь. А подсветка о том и сообщает, что формат не верный.

j0hnik 10.08.2017 17:04

можно создать свой кастомный input тогда будет работать

рони 10.08.2017 17:04

MC-XOBAHCK,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
  <script>
$(function() { $('input').on('input', function(){
var a, b, pl_s;

  a = $('#val_a').val().trim().replace(/,/,'.');	//Длина прямоугольника
  b = $('#val_b').val().trim().replace(/,/,'.');;	//Ширина прямоугольника

  a = parseFloat(a)||0;
  b = parseFloat(b)||0;

  pl_s = a * b;	//Площадь

  $('#pls').html(pl_s.toFixed(2));
    })
});
  </script>
</head>

<body>
<div>
<h4>Прямоугольник</h4>
<p>Длина прямоугольника: <input id="val_a"  /></p>
<p>Ширина прямоугольника: <input id="val_b" /></p>
<div>Площадь прямоугольника:<span id="pls"></span> м.кв.</div>
</div>

</body>
</html>


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