如何将 NaN 转换为整数
How to change NaN into Integer
我有这样的看法
<div class="form-group">
<div class="col-sm-4 col-md-4">
<label>Harga Normal</label>
<input id="NormalPrice" type="text" size="30" class="form-control number uang" name="NormalPrice" value="">
</div>
<div class="col-sm-4 col-md-4">
<label>Harga Diskon</label>
<input id="DiscountPrice" type="text" size="30" class="form-control number" name="DiscountPrice" value="">
</div>
<div class="col-sm-4 col-md-4">
<label>Hari aktif kupon</label>
<input id="CouponActiveDay" type="text" min="0" max="365" class="form-control number" name="CouponActiveDay" value="">
</div>
</div>
我想把文字变成数字,所以我这样使用
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script>
function count(){
var res = (Number($('#NormalPrice').val()) - Number($('#DiscountPrice').val())) / Number($('#NormalPrice').val()) * 100;
$('#Discount').val(parseInt(res)+"%");
}
$('#DiscountPrice').keyup(count);
$(document).on('keypress','.number',function(e){
if((e.which <= 57 && e.which >= 48) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode==9 || e.which==43 || e.which==44 || e.which==45 || e.which==46 || e.keyCode==8){
return true;
}else{
return false;
}
});
$(document).on('blur','.uang',function(){
$(this).val(numeral($(this).val()).format('0,0'));
}).on('focus','.uang',function(){
$(this).val($(this).val());
});
但是当我在 NormalPrice 上输入不超过 3 位数字时。我可以获得折扣值。但是如果我输入超过 3 位数字,我会得到 NaN,我认为它是 returns 字符串,但我使用了 parseInt .
在您的代码中,parseInt
解析字符串和 returns 以 10 为底的整数,如果无法解析则 NaN
。如果它不是字符串,它会先尝试将其转换为字符串。我相信这是因为你使用逗号作为数字格式。
我的建议是在设置 res
变量的行上放置断点并检查实际值。
当您将数值格式化为具有千位分隔符时,您会将其转换为字符串。一种解决方法是替换 count
函数中的逗号。
function count(){
var res = (Number($('#NormalPrice').val().replace(/,/g,'')) - Number($('#DiscountPrice').val().replace(/,/g,''))) / Number($('#NormalPrice').val().replace(/,/g,'')) * 100;
$('#Discount').val(parseInt(res)+"%");
}
编辑:解释
Number('1,000')
是 NaN,而 Number('1000')
是 1000。
您在这里所做的是在将逗号传递给 Number
之前替换逗号。现在,您不想更改输入中显示的值,因为事先对其进行格式化将毫无意义。因此,我将 replace
应用于值而不是更改值本身。
当您 replace text on a string 时,您正在生成一个应用了替换的新字符串。你可以这样做,例如
"1,000".replace(',','') // outputs "1000"
但它只会替换第一次出现的逗号。所以如果你这样做,你可能会遇到问题
"1,000,000".replace(',','') // outputs "1000,000"
当你使用正则表达式时,你可以告诉它替换非常逗号:
"1,000,000".replace(/,/g,'') // outputs "1000000"
g
参数(我在本版之前忘记包括在内)的意思就是:"every occurence".
我有这样的看法
<div class="form-group">
<div class="col-sm-4 col-md-4">
<label>Harga Normal</label>
<input id="NormalPrice" type="text" size="30" class="form-control number uang" name="NormalPrice" value="">
</div>
<div class="col-sm-4 col-md-4">
<label>Harga Diskon</label>
<input id="DiscountPrice" type="text" size="30" class="form-control number" name="DiscountPrice" value="">
</div>
<div class="col-sm-4 col-md-4">
<label>Hari aktif kupon</label>
<input id="CouponActiveDay" type="text" min="0" max="365" class="form-control number" name="CouponActiveDay" value="">
</div>
</div>
我想把文字变成数字,所以我这样使用
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script>
function count(){
var res = (Number($('#NormalPrice').val()) - Number($('#DiscountPrice').val())) / Number($('#NormalPrice').val()) * 100;
$('#Discount').val(parseInt(res)+"%");
}
$('#DiscountPrice').keyup(count);
$(document).on('keypress','.number',function(e){
if((e.which <= 57 && e.which >= 48) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode==9 || e.which==43 || e.which==44 || e.which==45 || e.which==46 || e.keyCode==8){
return true;
}else{
return false;
}
});
$(document).on('blur','.uang',function(){
$(this).val(numeral($(this).val()).format('0,0'));
}).on('focus','.uang',function(){
$(this).val($(this).val());
});
在您的代码中,parseInt
解析字符串和 returns 以 10 为底的整数,如果无法解析则 NaN
。如果它不是字符串,它会先尝试将其转换为字符串。我相信这是因为你使用逗号作为数字格式。
我的建议是在设置 res
变量的行上放置断点并检查实际值。
当您将数值格式化为具有千位分隔符时,您会将其转换为字符串。一种解决方法是替换 count
函数中的逗号。
function count(){
var res = (Number($('#NormalPrice').val().replace(/,/g,'')) - Number($('#DiscountPrice').val().replace(/,/g,''))) / Number($('#NormalPrice').val().replace(/,/g,'')) * 100;
$('#Discount').val(parseInt(res)+"%");
}
编辑:解释
Number('1,000')
是 NaN,而 Number('1000')
是 1000。
您在这里所做的是在将逗号传递给 Number
之前替换逗号。现在,您不想更改输入中显示的值,因为事先对其进行格式化将毫无意义。因此,我将 replace
应用于值而不是更改值本身。
当您 replace text on a string 时,您正在生成一个应用了替换的新字符串。你可以这样做,例如
"1,000".replace(',','') // outputs "1000"
但它只会替换第一次出现的逗号。所以如果你这样做,你可能会遇到问题
"1,000,000".replace(',','') // outputs "1000,000"
当你使用正则表达式时,你可以告诉它替换非常逗号:
"1,000,000".replace(/,/g,'') // outputs "1000000"
g
参数(我在本版之前忘记包括在内)的意思就是:"every occurence".