Javascript 数字比较失败 [英] Javascript number comparison fails

查看:26
本文介绍了Javascript 数字比较失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图了解我的错误在哪里,因为 JS 不可能在数学上失败!

在 HTML 表单上,我有一个选择和 9 个文本输入.然后,在 JS 上比较输入的文本.

我的问题如下:如果我写在

new_da3 = 1400new_a3 = 1900

JS 会说 ok3.

如果我写了

new_da3 = 1900new_a3 = 1400

JS 会说不!

但是如果我写了

new_da3 = 1500new_a3 = 800

JS 会说 ok3!

为什么?1500 不是比 800 大吗?

谢谢!

HTML:

 
<select id="new_nrp" onchange="selNrP(this.value);"风格=背景颜色:#F00;颜色:#FFF"><option value="" selected="selected"></option><option value="1">1</option><option value="2">2</option><option value="3">3</option></选择><?phpfor($i=1; $i<=3; $i++){打印 '<input type="text" size="5" maxlength="5" id="new_da'.$i.'"><input type="text" size="5" maxlength="5" id="new_a'.$i.'">';}?><input type="submit" class="buttongreen" onClick="test()" value="试试测试功能!"></表单>

JS

函数测试(){var new_da1 = document.getElementById('new_da1').valuevar new_a1 = document.getElementById('new_a1').valuevar new_da2 = document.getElementById('new_da2').valuevar new_a2 = document.getElementById('new_a2').valuevar new_da3 = document.getElementById('new_da3').valuevar new_a3 = document.getElementById('new_a3').valuevar new_nrp = document.getElementById('new_nrp').value开关(new_nrp){案例3":if(new_a2 < new_da3 && new_da3 <= new_a3){警报('ok3')} 别的 {警报('no3')返回}情况2":if(new_a1 < new_da2 && new_da2 <= new_a2){警报('ok2')} 别的 {警报('no2')返回}情况1':if(new_da1 <= new_a1){警报('ok1')} 别的 {警报('no1')返回}休息;默认:alert("你怎么在这里?");返回;}}

解决方案

因为您比较的是字符串,而不是整数.使用 parseInt 将您的值显式转换为整数.

这基本上就是你在做什么:jsFiddle 示例

要进行转换,请将变量更改为:

var new_da1 = parseInt( document.getElementById('new_da1').value, 10);

(假设它们都是整数)

I'm trying to understand where is my error, because it's not possible that JS fails in math!

On the HTML form I have a select and 9 text input. Then, on the JS I compare the text entered.

My problem is the following: If I write on

new_da3 = 1400
new_a3 = 1900

the JS will say ok3.

If I write on

new_da3 = 1900
new_a3 = 1400

the JS will say no3!

BUT If I write on

new_da3 = 1500
new_a3 = 800

the JS WILLL SAY ok3!

Why? Isn't 1500 bigger than 800?

Thank you!

HTML:

 <form>
 <select id="new_nrp" onchange="selNrP(this.value);" style="background-color:#F00; color:#FFF">
            <option value="" selected="selected"></option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>

    <?php
    for($i=1; $i<=3; $i++){
        print '<input type="text" size="5" maxlength="5" id="new_da'.$i.'">
               <input type="text" size="5" maxlength="5" id="new_a'.$i.'">';

    }
    ?>

    <input type="submit" class="buttongreen" onClick="test()" value="Try the test function!">
</form>

JS

function test(){
    var new_da1 = document.getElementById('new_da1').value
var new_a1 = document.getElementById('new_a1').value
var new_da2 = document.getElementById('new_da2').value
var new_a2 = document.getElementById('new_a2').value
var new_da3 = document.getElementById('new_da3').value
var new_a3 = document.getElementById('new_a3').value

var new_nrp = document.getElementById('new_nrp').value

switch(new_nrp){
    case '3':
        if(new_a2 < new_da3 && new_da3 <= new_a3){
            alert('ok3')
        } else {
            alert('no3')
            return
        }
    case '2':
        if(new_a1 < new_da2 && new_da2 <= new_a2){
            alert('ok2')
        } else {
            alert('no2')
            return
        }
    case '1':
        if(new_da1 <= new_a1){
            alert('ok1')
        } else {
            alert('no1')
            return
        }
    break;
    default:
        alert("Why are you here?");
        return;
}

}

解决方案

Because you're comparing strings, not integers. Use parseInt to explicitly cast your values as integers.

Here's essentially what you're doing: jsFiddle example

To do the conversion, change your variables to something like:

var new_da1 = parseInt( document.getElementById('new_da1').value, 10);

(assuming they're all integers)

这篇关于Javascript 数字比较失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆