Что не так с троичным оператором JavaScript в моем приложении?

1

Я пишу простое приложение со скидкой с быстрым вводом. Проблема в моем троичном операторе - он не учитывает newPrice, а также показывает, что ввод недействителен. Можете ли вы сказать мне, что я делаю не так?

Если ввод неправильный, я хочу присвоить newPrice значение NULL и предупредить "Неверные данные".

Мой код:

const price = prompt('Please, enter the price:');
const discount = prompt('Please, enter the discount amount:');

const newPrice = ((9999999 > price > 0) && (99 > discount > 0)) ? (price - price * discount / 100) : (null, alert('Invalid data'));
console.log(newPrice)
  • 0
    вероятно, приоритет оператора. если сомневаетесь, ставьте вокруг себя больше скобок
  • 0
    У меня отлично работает в консоли Chrome и Firefox Dev
Показать ещё 1 комментарий
Теги:

5 ответов

1
Лучший ответ

Попробуйте отделить операторы кода

  1. убедитесь, что новая цена фактически равна нулю. Не undefined (по вашему вопросу)
  2. материал a > b > c не работает afaik в JS. Пожалуйста, измените синтаксис, как я сделал ниже или аналогичный.

const price = prompt('Please, enter the price:');
const discount = prompt('Please, enter the discount amount:');

const newPrice = (price && (9999999 > price) && discount && (99 > discount)) ? (price - price * discount / 100) : null;
console.log(newPrice);
if(!newPrice){alert('Invalid data');}
0

Подсказка может считывать значение в виде строки. Преобразуйте его в число, используя parseInt или unary +

const price = parseInt(prompt('Please, enter the price:'));
const discount = parseInt(prompt('Please, enter the discount amount:'));

const newPrice = ((price && price > 0 && price < 9999999) && (discount && discount >0 && discount < 99 )) ? (price - price * discount / 100) : (null, alert('Invalid data'));
console.log(newPrice)
  • 1
    Сравнение строк и чисел работает нормально, когда строка содержит только числа
  • 1
    @ChrisRollins Это не так, попробуйте console.log('10' > '9'); ,
Показать ещё 8 комментариев
0

Во-первых, преобразуйте свои входные данные в числа, а во-вторых, реорганизуйте ваши условия, чтобы они действовали (у вас не может быть x > y > z IIRC):

const price = parseInt(prompt('Please, enter the price:'));
const discount = parseInt(prompt('Please, enter the discount amount:'));

const newPrice = (((9999999 > price) && price) && ((99 > discount) && discount)) ? (price - price * discount / 100) : (null, alert('Invalid data'));
console.log(newPrice);
0

Вот пример выполнения как методом if-else и тернарным оператором (?:. Но я бы порекомендовал пойти с if-else если у вас много решений.

var price = prompt('Please, enter the price:');
var discount = prompt('Please, enter the discount amount:');
var newPrice;
if((price>0 && price < 9999999)&&(discount>0 && discount < 99)){
newPrice=price - (price * discount) / 100;
}else{
newPrice='null';
alert('Invalid data');
}
var newPrice1 = ((9999999 > price && price > 0) && (99 > discount && discount > 0)) ? (price - (price * discount) / 100) : ('null', alert('Invalid data'));
console.log(newPrice);
console.log(newPrice1);
0

Вам не хватает скобок в расчете (price - price * discount/100)

Подробнее о приоритете оператора

const price = prompt('Please, enter the price:');
const discount = prompt('Please, enter the discount amount:');

const newPrice = ((9999999 > price > 0) && (99 > discount > 0)) ? price - (price * (discount / 100)) : (null, alert('Invalid data'));
console.log(newPrice)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню