对于任何以数字开头的内容,即使其中包含字母,isNaN()也会返回false



我制作的程序应该取一个选定的数字系统中的一个数字,并将其转换为另一个选定系统中相同值的数字。它要大得多,但我给了你一个简单的版本,已经选择了你想从和转换到的系统

如果输入的数字不是正确的数字,它应该会给您一条错误消息(Please enter a proper ${fromSystem[1]} number(。但如果一个数字以数字开头,后来又包含字母,它就会认为这是一个数字。数字后面的所有内容都被忽略(例如:对于25ad3,它将转换25并忽略它之后的所有内容(。您可以测试它(此代码具有功能(。

有人知道怎么解决这个问题吗?

编辑:我刚刚添加了更多细节

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary
$("#convert").click(function() {
var result;
var inputValue = $("#inputBox").val();
if (fromSystem === toSystem) {
result = inputValue;
} else {
result = parseInt(inputValue, fromSystem[0]).toString(toSystem[0]);
}
if (isNaN(result) === true) {
result = `Please enter a proper ${fromSystem[1]} number`;
} else {
result = result.toUpperCase();
}
$("#resultPara").html(result);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
<input id="inputBox" type="text" placeholder="">
<button id="convert" type="button">Convert</button>
<p id="resultPara"></p>
</div>

由于isNaN的实现方式,这是一种理想的行为,请参阅文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Description

我会首先使用regexp测试它是否只包含数字,比如:

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary
$("#convert").click(function() {
var result;
var inputValue = $("#inputBox").val();
if (fromSystem === toSystem) {
result = inputValue;
} else {
result = parseInt(inputValue, fromSystem[0]).toString(toSystem[0]);
}
if (inputValue.match(/[^0-9]/g)) {
result = `Please enter a proper ${fromSystem[1]} number`;
} else {
result = result.toUpperCase();
}
$("#resultPara").html(result);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
<input id="inputBox" type="text" placeholder="">
<button id="convert" type="button">Convert</button>
<p id="resultPara"></p>
</div>

和@Lukasz说的一样。另一种解决方法是使用+将字符串转换为数字,假设您总是在基数为10的中引入一个数字

fromSystem = [10, "decimal"]; // Decimal
toSystem = [2, "binary"]; // Binary
$("#convert").click(function() {
var result;
var inputValue = $("#inputBox").val();
if (fromSystem === toSystem) {
result = inputValue;
} else {
result = (+inputValue).toString(toSystem[0]);
}
if (isNaN(result) === true) {
result = `Please enter a proper decimal number`;
} else {
result = result.toUpperCase();
}
$("#resultPara").html(result);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="converterArea">
<input id="inputBox" type="text" placeholder="">
<button id="convert" type="button">Convert</button>
<p id="resultPara"></p>
</div>

最新更新