2015-02-12 2 views
-5

Мой код:Почему мой оператор JS «if» всегда оценивает значение false?

if (calculatedColumn5 >= calculatedColumn) { 
'Enough credits.' 
} 
{ 
'Not enough credits.' 
} 

Оценивает на «Не хватает кредитов», даже если «calculatedColumn5» явно больше, чем «calculatedColumn».

Я даже попытался это:

if (calculatedColumn5 >= calculatedColumn) { 
'Enough credits.' 
} 
else if (calculatedColumn5 < calculatedColumn) 
{ 
'Not enough credits.' 
} 
else { 
'' 
} 

... и она всегда имеет значение ''! Так есть проблема с моими «if» условиями, когда они просто всегда оценивают false?

Переменные, кстати (рассчитанныеColumn5 и calculateColumn), являются десятичными значениями.

+4

Ну, каковы ваши значения для 'calcColumn5' и' calculateColumn' и как вы их получите? – j08691

+1

Обратите внимание, что в вашем первом фрагменте кода отсутствует «else», что делает второй блок безусловным. – error

+0

Каков тип 'calcColumn5' и' calculateColumn' Убедитесь, что они либо int, либо float, а не строки, иначе используйте 'parseFloat' для каждого из них? Кроме того, «достаточное количество кредитов» недействительно в javascript. вам следует скорее «оповещать» («достаточное количество кредитов»); 'или' console.log («достаточно кредитов»); '. Более того, отсутствует «еще» в самом первом коде. – briosheje

ответ

2

Возможно, значения фактически являются строками и сравниваются как строки.

Попробуйте использовать:

if (parseFloat(calculatedColumn5) >= parseFloat(calculatedColumn)) { 
+0

Я пробовал это, но это не помогло. Я также попытался изменить вычисляемые поля в value.parseFloat, что, возможно, неверно, но он оценивается как null. –

+0

В любом случае if (parseFloat (calculateColumn5)> = parseFloat (расчетная сумма)) { «Достаточно кредитов». } { «Недостаточно кредитов». } - который все еще всегда оценивает «Недостаточно кредитов». –

+0

Вы забыли слово «другое» как упоминавшееся «ошибка». Также, что вы делаете с этими строками, вам может понадобиться console.log («Enough credits»); – Mex

0

Имейте в виду, что в JS неопределенное (не инициализирован) переменная принимает значение ложь. Попробуйте следующее:

var a; 
if (a) console.log('True'); else console.log('False'); 

Оценивает ложь.

То же самое верно для любой логической операции, выполняемой с неопределенными значениями.

var a; 
var b = 5; 
if (a > b) console.log('greater'); else console.log('lower or equal'); 

Оценивает значение false.

+0

Я считаю, что свойства определены правильно (хотя, возможно, есть проблема с их типы данных?) Я пишу скриптовые столбцы в Intrinsik Informer - другие расчетные столбцы могут быть использованы в формулах без проблем. –

+0

если вы отлаживаете и все операнды имеют значения ... то я не решал вашу проблему:) – Veverke

-1

Вам следует обойти оба или хотя бы избавиться от десятичной дроби, чтобы избежать нежелательного поведения. Пожалуйста, обратите внимание на https://stackoverflow.com/a/18741293/2192152

Также:

// Test if ===, or greated 
if (calculatedColumn5 >= calculatedColumn) { 
'Enough credits.' 
} 
// Test if strictly inferior 
else if (calculatedColumn5 < calculatedColumn) 
{ 
'Not enough credits.' 
} 
// this will NEVER fire as all other cases have been tested. 
else { 
'' 
} 

Edit: это работает. предполагая 2 десятичных числа, но вы можете умножить на 100 000 или все, что вам нужно. (вы могли бы даже сделать это автоматически, разделив переменную a и определяя длину за период).

var a = 12.21; 
var b = 12.35; 
a = Math.round(a * 100); 
b = Math.round(b * 100); 

var test = a > b ? 'A > B' : 'A < B'; 

alert(test); 
+0

Все еще переваривая комментарии каждого, но как я могу округлить или избавиться от десятичной, когда у некоторых учеников есть половина кредитов? Позвольте мне попробовать, если (parseInt (2 * calculateColumn5)> = parseInt (2 * calculateColumn)) { 'Достаточно кредиты «. } еще { «Недостаточно кредитов». } ... –

+0

Этот код имеет ту же проблему: он всегда оценивается как false. –

+0

как насчет этого: http://jsfiddle.net/mcf42vrc/ – Xspirits

Смежные вопросы