Функция расчета с использованием ключа до тысячи в формате разделителя - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу сделать расчет при вводе пользователем, результат будет отображаться в другом поле.с номером формата с разделителем тысяч, таким как 2500,00

, поэтому, если я суммирую 2500,00 + 2,500,00 , результат должен быть 5000,00

, но мой код показывает 4,00

function isNumberKey(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode(key);
  if (key.length == 0) return;
  var regex = /^[0-9.,\b]+$/;
  if (!regex.test(key)) {
    theEvent.returnValue = false;
    if (theEvent.preventDefault) theEvent.preventDefault();
  }
}

function toFloat(z) {
  var x = document.getElementById(z);
  x.value = parseFloat(x.value).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}

$( ".fn" ).keyup(function() {
 var nmi = $('#nmi').val();
  var a = $('#a').val();

  var total = parseFloat(nmi) + parseFloat(a);
  $("#total").val(parseFloat(total).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input onchange="toFloat('nmi')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="nmi" id="nmi">

<input onchange="toFloat('a')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="a" id="a">
<br> total
<input onchange="toFloat('total')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="total" id="total">

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Просто для изменения кода.

$(document).ready(function() {
  $('.fn').on('input', function() {
    this.value = this.value.match(/^\d+\.?\d{0,2}/);
    calculate();
  });
});

function calculate() {
  var t = 0;
  nmi = ($("#nmi").val() ? parseFloat($("#nmi").val()) : 0);
  a = ($("#a").val() ? parseFloat($("#a").val()) : 0);
  $("#total").val(nmi + a);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" maxlength="10" required="required" class="form-control fn" placeholder="RM" name="nmi" id="nmi">

<input type="text" maxlength="10" required="required" class="form-control fn" placeholder="RM" name="a" id="a">
<br> total
<input type="text" maxlength="10" required="required" class="form-control fn" placeholder="RM" name="total" id="total">
0 голосов
/ 26 февраля 2019

Давайте попробуем это ,,, это работает для меня "Dial Gtg"

$('input.CurrencyInput').on('blur', function() {
  const value = this.value.replace(/,/g, '');
  this.value = parseFloat(value).toLocaleString('en-US', {
    style: 'decimal',
    maximumFractionDigits: 2,
    minimumFractionDigits: 2
  });
});

$('input.CurrencyInput2').on('blur', function() {
  const value = this.value.replace(/,/g, '');
  this.value = parseFloat(value).toLocaleString('en-US', {
    style: 'decimal',
    maximumFractionDigits: 2,
    minimumFractionDigits: 2
  });
});


$( ".fn" ).keyup(function() {
 var a = $('#a').val().replace(/,/g,'');
 
  var b = $('#b').val().replace(/,/g,'');

  var total = parseFloat(a) + parseFloat(b);
  $("#total_nya").val(parseFloat(total).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="CurrencyInput fn" id="a">

<input class="CurrencyInput2 fn" id="b">

<input class="total_nya" id="total_nya">
0 голосов
/ 22 февраля 2019

Когда parseFloat('2,500.00') вернет 2 из-за ,.

parseFloat : анализирует свой аргумент и возвращает число с плавающей запятой.Если он встречает символ, отличный от знака (+ или -), цифры (0-9), десятичной точки или показателя степени, , он возвращает значение до этой точки и игнорирует этот символ и все последующие символы

удалить , из значения с помощью replace()

function isNumberKey(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode(key);
  if (key.length == 0) return;
  var regex = /^[0-9.,\b]+$/;
  if (!regex.test(key)) {
    theEvent.returnValue = false;
    if (theEvent.preventDefault) theEvent.preventDefault();
  }
}

function toFloat(z) {
  var x = document.getElementById(z);
  x.value = parseFloat(x.value).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
}
$( ".fn" ).keyup(function() {
 var nmi = $('#nmi').val().replace(/,/g,'');
 
  var a = $('#a').val().replace(/,/g,'');

  var total = parseFloat(nmi) + parseFloat(a);
  $("#total").val(parseFloat(total).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input onchange="toFloat('nmi')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="nmi" id="nmi">

<input onchange="toFloat('a')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="a" id="a">
<br> total
<input onchange="toFloat('total')" type="text" maxlength="10" onkeypress="return isNumberKey(event)" required="required" class="form-control fn" placeholder="RM" name="total" id="total">
...