我有一个代码,它会为下面的每个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;
但是当数字数字达到Billion(例如10.000.000.000)时,id nilai_potensi_kerugian
的输入文本总是出错。我的代码可能出现什么问题?
答案 0 :(得分:2)
问题出在您的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
&#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;
答案 1 :(得分:1)
您的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, ".")
;
});
})
);
&#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;
看到问题?您的代码仅删除.
的前两次。
要解决此问题,我更改了行
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, ".");
});
})
);
&#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;