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

时间:2018-03-17 02:49:26

标签: javascript

我有一个代码,它会为下面的每个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, ".");
        });
    })
);
&#13;
<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>
&#13;
&#13;
&#13;

但是当数字数字达到Billion(例如10.000.000.000)时,id nilai_potensi_kerugian的输入文本总是出错。我的代码可能出现什么问题?

2 个答案:

答案 0 :(得分:2)

问题出在您的showkerugian功能中:

  

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

以前的语句只会在.变量中替换最多两个str。 因此,不需要正确重置需要两个以上点的数字。详细了解string.replace

使用RegExp作为replace函数中的模式检查问题和可能的解决方案:

&#13;
&#13;
console.log('10.000.000.000'.replace('.', '').replace('.', ''));
// -> 10000000.000

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

以下内容包含代码段中的修复:

&#13;
&#13;
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, ".");
  });
});
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您的convertToRupiah似乎没问题,但showkerugian()错误angka进入convertToRupiah

让我们回顾您的代码

&#13;
&#13;
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, ".")
                ;
              });
            })
        );
&#13;
<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>
&#13;
&#13;
&#13;

看到问题?您的代码仅删除.的前两次。

要解决此问题,我更改了行

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

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

将删除因. RegExp旗帜而导致g的所有出现

&#13;
&#13;
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, ".");
    });
  })
);
&#13;
<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>
&#13;
&#13;
&#13;