如何将NaN更改为Integer

时间:2017-09-29 10:06:02

标签: jquery numbers number-formatting

我有这样的观点

<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并且我认为它返回字符串,但我使用了parseInt。

2 个答案:

答案 0 :(得分:1)

将数值格式化为千位分隔符时,您将其转换为字符串。一种解决方法是替换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参数(我在此版本之前忘记包含)完全意味着:“每次出现”。

答案 1 :(得分:0)

在您的代码中,parseInt解析字符串并返回基数10或NaN的整数,如果它无法解析它。如果它不是字符串,它会尝试先将其转换为字符串。我相信这是因为你使用昏迷作为数字格式。

我的建议是将断点放在您设置res变量的行上,并检查实际值。

Number.parseInt Documentation