代码之家  ›  专栏  ›  技术社区  ›  Fernando Aureliano

计算货币大于999,99

  •  -1
  • Fernando Aureliano  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  2
  •   Calvin Nunes    6 年前

    你需要记住当你拿到 .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">
        2
  •  0
  •   Medet Tleukabiluly    6 年前
    1. meses 变量
    2. 使用时 .replace

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

    这样就可以正确地替换字符串

        3
  •  0
  •   Fernando Aureliano    6 年前

    很好,谢谢,但是如果我用 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">
        4
  •  0
  •   Fernando Aureliano    6 年前

    修正:

    我解决了在计算之前去掉这个点的问题

    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">