2014-10-18 6 views
-3

Это очень простая математика операция путает меня ..Javascript результат арифметической операция

var cap = '17.00' 
var amount = '114.00'; 

if(amount > cap){ 
    alert('Greater'); 
}else{ 
    alert('Less Than'); 
} 

Почему этот результат говорит 114.00 меньше 17.00?

Я уверен, что это очень прямой ответ. Это целые числа, поэтому я решил, что это будет прямое сравнение значений, но, видимо, я ошибаюсь?

+0

В коде отсутствует целое число. Прежде всего, это строки. Во-вторых, если вы удалите '' 's, они по-прежнему не являются целыми числами из-за' .00'. В-третьих, они все еще не являются целыми, потому что все числа в JavaScript - это пары. –

ответ

5

Это не говорит, что 114.00 меньше 17.00, он говорит, что "114.00" предшествует "17.00".

Вы сравниваете строки, поэтому сравнение выполняется в соответствии с тем, как строки будут сортироваться, а не какое числовое значение, которое они представляют.

Если вы хотите сравнить числа, Вы должны поместить числа в переменных:

var cap = 17.00; 
var amount = 114.00; 
1

Удалите кавычки вокруг числа. Вы сравниваете строки вместо чисел.

2

Они оба целые числа, так что я решил, что это было бы прямо сравнение значений

Это проблема: они не целые числа, они строк. Строки сравниваются лексикографически, например. ('a' < 'b') === true и ('a' < 'aaa') === true.

Если вы хотите, чтобы сравнить их как числа, убедитесь, что они номер, чтобы начать с:

var cap = 17.00; // the .00 is redundant though, just 17 would also work 
var amount = 114.00; 

или если эти переменные будут получены в виде строки из других, конвертировать их первым:

var cap = '17.00'; 
var amount = '114.00'; 
if (Number(cap) < Number(amount)){ 
    alert('Greater'); 
}else{ 
    alert('Less Than'); 
} 
Смежные вопросы