代码之家  ›  专栏  ›  技术社区  ›  Gagantous Faradox

在每3位数字中为货币添加一个点

  •  0
  • Gagantous Faradox  · 技术社区  · 8 年前

    我有一个代码,它会给下面每3位数字lke片段一个点

    function convertToRupiah(angka)
    {
         var rupiah = '';    
         var angkarev = angka.toString().split('').reverse().join('');
          
         for(var i = 0; i < angkarev.length; i++) 
             if(i%3 == 0) rupiah += angkarev.substr(i,3)+'.';
          
         return rupiah.split('',rupiah.length-1).reverse().join('');
    }
      
    function showkerugian(str)
    {
        // var tindak_lanjut = 
        $('#nilai_tindak_lanjut').val().replace(".", "").replace(".", "");
        var temuan = str.replace(".", "").replace(".", "");
        // var total = temuan-tindak_lanjut;
    
        $('#nilai_potensi_kerugian').val(convertToRupiah(temuan));
    };
        
    $('input#nilai_temuan').on('keyup focusin focusout ', (function(event) 
        {
            if(event.which >= 37 && event.which <= 40) return;
    
            // format number
            $(this).val(function(index, value) {
                return value
                    .replace(/\D/g, "")
                    .replace(/\B(?=(\d{3})+(?!\d))/g, ".");
            });
        })
    );
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <input type="text" oninput="showkerugian(this.value)" class="form-control nominal" id="nilai_temuan" name="nilai_temuan">
    <input type="text" class="form-control nominal" name="nilai_potensi_kerugian" id="nilai_potensi_kerugian" readonly>

    但是id为的输入文本 nilai_potensi_kerugian 当数字位数达到十亿(例如10.000.000.000)时,始终出错。我的代码会出什么问题?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Carloluis    8 年前

    问题出在 showkerugian 功能:

    var temuan = str.replace(".", "").replace(".", "");

    上一条语句最多只能替换两条 . 在您的 str 变量 因此,需要两个以上点的数字无法正确重置。了解更多信息 string.replace

    使用 RegExp 作为 replace 功能:

    console.log('10.000.000.000'.replace('.', '').replace('.', ''));
    // -> 10000000.000
    
    console.log('10.000.000.000'.replace(/\./g, ''));
    // -> 10000000000

    以下是代码段中的修复程序:

    function convertToRupiah(angka){
        var rupiah = '';    
        var angkarev = angka.toString().split('').reverse().join('');
          
        for(var i = 0; i < angkarev.length; i++) 
            if(i%3 == 0) rupiah += angkarev.substr(i,3)+'.';
          
        return rupiah.split('',rupiah.length-1).reverse().join('');
    }
      
    function showkerugian(str) {
          var temuan = str.replace(/\./g, ""); // update pattern to regex in order to replace all `.` occurrences
    
          $('#nilai_potensi_kerugian').val(convertToRupiah(temuan));
    };
        
    $('input#nilai_temuan') .on('keyup focusin focusout ', function(event) {
      if(event.which >= 37 && event.which <= 40) return;
      // format number
      $(this).val(function(index, value) {
          return value.replace(/\D/g, "")
                  .replace(/\B(?=(\d{3})+(?!\d))/g, ".");
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <input type="text" oninput="showkerugian(this.value)" class="form-control nominal" id="nilai_temuan" name="nilai_temuan">
    <input type="text" class="form-control nominal" name="nilai_potensi_kerugian" id="nilai_potensi_kerugian" readonly>
        2
  •  1
  •   Kevin Qian    8 年前

    你的 convertToRupiah 看起来不错,但你的 showkerugian() 喂错了吗 angka 进入 convertToRupiah转换器

    让我们回顾一下 您的代码 :

    function convertToRupiah(angka)
      {
    console.log(angka) // I added this to log what is fed into the function
          var rupiah = '';    
          var angkarev = angka.toString().split('').reverse().join('');
          
          for(var i = 0; i < angkarev.length; i++) 
            if(i%3 == 0) rupiah += angkarev.substr(i,3)+'.';
          
          return rupiah.split('',rupiah.length-1).reverse().join('');
      
      }
      
       function showkerugian(str)
        {
          // var tindak_lanjut = $('#nilai_tindak_lanjut').val().replace(".", "").replace(".", "");
          var temuan = str.replace(".", "").replace(".", "");
          // var total = temuan-tindak_lanjut;
    
          $('#nilai_potensi_kerugian').val(convertToRupiah(temuan));
        };
        
        $('input#nilai_temuan').on('keyup focusin focusout ', (function(event) 
                    {
                  if(event.which >= 37 && event.which <= 40) return;
    
                  // format number
                  $(this).val(function(index, value) {
                    return value
                    .replace(/\D/g, "")
                    .replace(/\B(?=(\d{3})+(?!\d))/g, ".")
                    ;
                  });
                })
            );
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <input type="text" oninput="showkerugian(this.value)" class="form-control nominal" id="nilai_temuan" name="nilai_temuan">
     <input type="text" class="form-control nominal" name="nilai_potensi_kerugian" id="nilai_potensi_kerugian" readonly>

    看到问题了吗?您的代码只删除 .

    为了解决这个问题,我改变了线路

    var temuan = str.replace(".", "").replace(".", "");
    

    进入

    var temuan = str.replace(/\./g, "");
    

    将删除所有出现的 由于 RegExp g 旗帜

    function convertToRupiah(angka) {
      var rupiah = '';
      console.log(angka)
      var angkarev = angka.toString().split('').reverse().join('');
      for (var i = 0; i < angkarev.length; i++) {
        if (i%3 == 0) {
          rupiah += angkarev.substr(i,3)+'.';
        }
      }
      return rupiah.split('',rupiah.length-1).reverse().join('');
    }
      
    function showkerugian(str) {
      var temuan = str.replace(/\./g, "");
      $('#nilai_potensi_kerugian').val(convertToRupiah(temuan));
    }
        
    $('input#nilai_temuan').on('keyup focusin focusout ', (function(event) {
      if (event.which >= 37 && event.which <= 40) return;
      $(this).val(function(index, value) {
        return value
          .replace(/\D/g, "")
          .replace(/\B(?=(\d{3})+(?!\d))/g, ".");
        });
      })
    );
    <脚本src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script>
    
    <输入type=“text”oninput=“showkerugian(this.value)”class=“form control nominal”id=“nilai\u temuan”name=“nilai\u temuan”>
    <输入type=“text”class=“form control nominal”name=“nilai\u potensi\u kerugian”id=“nilai\u potensi\u kerugian”只读;