Я пишу простое приложение со скидкой с быстрым вводом. Проблема в моем троичном операторе - он не учитывает 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)
Попробуйте отделить операторы кода
undefined
(по вашему вопросу)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');}
Подсказка может считывать значение в виде строки. Преобразуйте его в число, используя 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)
console.log('10' > '9');
,
Во-первых, преобразуйте свои входные данные в числа, а во-вторых, реорганизуйте ваши условия, чтобы они действовали (у вас не может быть 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);
Вот пример выполнения как методом 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);
Вам не хватает скобок в расчете (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)