如何将 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。
【问题讨论】:
<input type="number"> - 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 如何将列从字符串类型更改为整数?