如何将 NaN 更改为整数

Posted

技术标签:

【中文标题】如何将 NaN 更改为整数【英文标题】:How to change NaN into Integer 【发布时间】:2017-09-29 10:06:02 【问题描述】:

我有这样的看法

<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。

【问题讨论】:

&lt;input type="number"&gt; - html | MDN @Pete 我用过 parseInt()。但它返回 NaN 问题:$(this).val(numeral($(this).val()).format('0,0'));(以及为什么$(this).val($(this).val()); o.O) @Andreas 模糊时你有其他方法来获取数字格式吗?我正在使用$(this).val(Number($(this).val())); 如果我只使用Number($(this).val()).. 当我聚焦时,我的文本字段将显示 NaN 如果你输入1000,它会变成1,000,而Number('1,000')就是NaN。无论如何,您是否要在表单中添加,。这会导致很多问题。 【参考方案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 参数(在这个版本之前我忘记包含了)的确切含义是:“每次出现”。

【讨论】:

哇,谢谢.. 它有效.. 但是,你能给我解释一下吗.. what is replace(/,/,'') 以及为什么我需要这样说? 我在回答中添加了解释【参考方案2】:

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

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

Number.parseInt Documentation

【讨论】:

以上是关于如何将 NaN 更改为整数的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 和 Laravel 如何将列从字符串类型更改为整数?

将整数类型的所有主键更改为 bigint,包括引用

将 MongoDB 中的 _id 类型更改为整数是不是不好?

RapidMiner - 将多项式属性更改为数字/整数

将由空格分隔的整数字符串更改为 int 列表

将列类型从整数更改为字符串