Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果数字大于数字,则为javascript_Javascript_Forms - Fatal编程技术网

如果数字大于数字,则为javascript

如果数字大于数字,则为javascript,javascript,forms,Javascript,Forms,我有这个javascript函数来验证一个数字是否大于另一个数字 function validateForm() { var x = document.forms["frmOrder"]["txtTotal"].value; var y = document.forms["frmOrder"]["totalpoints"].value; if (x > y) { alert("Sorry, you don't have enough points"

我有这个javascript函数来验证一个数字是否大于另一个数字

function validateForm() {
    var x = document.forms["frmOrder"]["txtTotal"].value;
    var y = document.forms["frmOrder"]["totalpoints"].value;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}
因为某种原因它不起作用

如果我做了
alert(x)
我得到1300,而
alert(y)
得到999

这是有效的

function validateForm() {
    var x = 1300;
    var y = 999;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}

在比较之前,您应该将它们转换为数字

尝试:

注意:
parseFloat
pareseInt
(对于比较整数,您需要指定基数)将为空字符串提供
NaN
,如果您不想将空字符串视为
0
,则与
NaN
进行比较将始终为
false
,然后你可以使用它们。

这样做

var x=parseInt(document.forms["frmOrder"]["txtTotal"].value);
var y=parseInt(document.forms["frmOrder"]["totalpoints"].value);
您可以使用数字构造函数“强制转换”为数字

var number = new Number("8"); // 8 number
您还可以调用parseInt内置函数:

var number = parseInt("153"); // 153 number

你在比较字符串。JavaScript比较字符串中每个字符的ASCII代码

要了解为什么会出现错误,请查看字符码:

"1300".charCodeAt(0);
49
"999".charCodeAt(0);
57
比较为false,因为在比较字符串时,1的字符代码不大于9的字符代码

解决方法是将字符串视为数字。您可以使用多种方法:

parseInt(string, radix)
parseInt("1300", 10);
> 1300 - notice the lack of quotes


+"1300"
> 1300


Number("1300")
> 1300

您在比较字符串,而不是数字。@MattStone:
“1300”>“999”//false
@user1689607
“user1689607”>“Matt Stone”//true
-我必须查找字符串转换的确切规则。奇怪的是,一位数的数字字符串工作正常。@马特斯通,字符串比较从第一个字母开始逐字母比较字符串,
1
小于
9
,这就是为什么
'1300'
。啊,对了,所以从技术上讲它仍然是一个字符串(ASCII顺序)比较。谢谢大家。请指定您希望使用
…][“txtTotal”]的基数10。值为10)
Ooops,使用Number作为构造函数返回一个Number对象,并且一个对象只与自身“相等”,因此
newnumber('7')==newnumber('7')
返回
false
。我想你是想把它用作函数,所以
Number('7')==Number('7')
。而
parseInt
应始终使用基数:
parseInt('153',10)
.Ohh!,关于“==”!!你是对的@RobG。。我测试了这些情况,结果很好,我发现Number对象总是隐式地调用“toString()”(实际上,我认为在内部它的调用valueOf()方法):newnumber('725')新编号('90')//输出真实的新数字('7')<新数字('7')//输出错误的新编号('7')>新编号('8')//输出错误的新编号('8')<新编号('7')//输出false,但对于等于,以这种方式,您需要:new Number('7')。valueOf()==new Number('7')。valueOf()//输出为真
"1300".charCodeAt(0);
49
"999".charCodeAt(0);
57
parseInt(string, radix)
parseInt("1300", 10);
> 1300 - notice the lack of quotes


+"1300"
> 1300


Number("1300")
> 1300