JS: Расчет значений, которые имеют точку и запятую (т.е. 1.000,00) - PullRequest
0 голосов
/ 05 октября 2018

У меня есть скрипт, использующий jQuery, который вычисляет валюту.Это работает нормально, но когда я записываю значение больше 999,99, оно возвращает значение с ошибкой, когда я использую маску и преобразовываю результат в денежный формат.Как я могу это исправить?

ОБНОВЛЕНО

$(document).ready(function() { 
    $('.money').mask("#.##0,00", {reverse: true});
});

accounting.settings = {
  currency: {
    symbol : "",   // default currency symbol is '$'
    format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
    decimal : ",",  // decimal point separator
    thousand: ".",  // thousands separator
    precision : 2   // decimal places
  },
  number: {
    precision : 0,  // default precision on numbers is 0
    thousand: ".",
    decimal : ","
  }
}


function calc(){
  var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
  var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
  var meses = parseInt( $("#meses").val());

  var resultado_gasto = parseFloat(gasto * meses);
  var resultado_plano = parseFloat(plano * meses);

  var result = resultado_gasto - resultado_plano;
  result = accounting.formatMoney(result);
  console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>

<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>



<select name="" id="regimento" class="select">
  <option value="19,90">MEI</option>
  <option value="85,90">SIMPLES SERVIÇO</option>
  <option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>

<input id="gasto_contabilidade" type="text" class="money" value="100000">

<select id="meses" class="select">
  <option value="12">12</option>
  <option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

ИСПРАВЛЕНИЕ:

Я решаю проблему с удалением точки перед ее вычислением

var gasto = $("#gasto_contabilidade").val().replace(".", '');

Спасибо, помогая парням!

$(document).ready(function() { 
    $('.money').mask("#.##0,00", {reverse: true});
});

accounting.settings = {
  currency: {
    symbol : "",   // default currency symbol is '$'
    format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
    decimal : ",",  // decimal point separator
    thousand: ".",  // thousands separator
    precision : 2   // decimal places
  },
  number: {
    precision : 0,  // default precision on numbers is 0
    thousand: ".",
    decimal : ","
  }
}


function calc(){
  var gasto = $("#gasto_contabilidade").val().replace(".", ''); // FIX
  plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
  gasto = parseFloat(gasto.replace(/\./g, ',').replace(/,/g, '.'));
  var meses = parseInt( $("#meses").val());

  var resultado_gasto = parseFloat(gasto * meses);
  var resultado_plano = parseFloat(plano * meses);

  var result = resultado_gasto - resultado_plano;
  result = accounting.formatMoney(result);
  console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>

<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>


<script>



</script>

<select name="" id="regimento" class="select">
  <option value="19,90">MEI</option>
  <option value="85,90">SIMPLES SERVIÇO</option>
  <option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>

<input id="gasto_contabilidade" type="text" class="money" value="100000">

<select id="meses" class="select">
  <option value="12">12</option>
  <option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
0 голосов
/ 05 октября 2018

Вы должны помнить, что при получении .val() от select он выглядит как строка, вы должны проанализировать его перед выполнением некоторых вычислений.

Кроме того, я не знаю, почему выиспользуя input type="tel" для использования в качестве числа, используйте type="number"

Код ниже работает и не показывает NaN ... Я просто не знаю, являются ли результаты расчетов тем, что вы ищете,

OBS : Вы не можете использовать значения в #gasto_contabilidade как 1.234,55, это должно быть 1234.55 или 1234,55 (это только потому, что вы заменяете ,.

function calc(){
  var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
  var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
  var meses = parseInt( $("#meses").val());

  var resultado_gasto = parseFloat(gasto * meses);
  var resultado_plano = parseFloat(plano * meses);

  var result = resultado_gasto - resultado_plano;
  console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="" id="regimento" class="select">
  <option value="19,90">MEI</option>
  <option value="85,90">SIMPLES SERVIÇO</option>
  <option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>

<input id="gasto_contabilidade" type="number" class="valor" value="1000">

<select id="meses" class="select">
  <option value="12">12</option>
  <option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
0 голосов
/ 07 октября 2018

Отлично, спасибо, но если я отформатирую значение с помощью accounting.js , оно будет работать не очень хорошо, посмотрите:

$(document).ready(function() { 
    $('.money').mask("#.##0,00", {reverse: true});
});

accounting.settings = {
  currency: {
    symbol : "",   // default currency symbol is '$'
    format: "%s%v", // controls output: %s = symbol, %v = value/number (can be object: see below)
    decimal : ",",  // decimal point separator
    thousand: ".",  // thousands separator
    precision : 2   // decimal places
  },
  number: {
    precision : 0,  // default precision on numbers is 0
    thousand: ".",
    decimal : ","
  }
}


function calc(){
  var plano = parseFloat($("#regimento").val().replace(/,/g, '.'));
  var gasto = parseFloat($("#gasto_contabilidade").val().replace(/\./g, ',').replace(/,/g, '.'));
  var meses = parseInt( $("#meses").val());

  var resultado_gasto = parseFloat(gasto * meses);
  var resultado_plano = parseFloat(plano * meses);

  var result = resultado_gasto - resultado_plano;
  result = accounting.formatMoney(result);
  console.log(result)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.15/jquery.mask.js"></script>

<script src="http://dubsolucoes.com.br/razonet/wp-content/themes/razonet_wp/assets/javascript/vendor/accounting.min.js"></script>


<script>



</script>

<select name="" id="regimento" class="select">
  <option value="19,90">MEI</option>
  <option value="85,90">SIMPLES SERVIÇO</option>
  <option value="199,90">SIMPLES COMÉRCIO E INDÚSTRIA</option>
</select>

<input id="gasto_contabilidade" type="text" class="money" value="100000">

<select id="meses" class="select">
  <option value="12">12</option>
  <option value="13">13</option>
</select>
<input type="button" onclick="calc()" value="Calculate">
0 голосов
/ 05 октября 2018
  1. Вы не используете meses переменную
  2. При использовании .replace со строкой, он заменяет только одно вхождение.При использовании с регулярным выражением он заменяет все вхождения

     gasto.replace(/,/gi,'.').replace(/ /gi,'')
    

Таким образом, строки заменяются правильно

...