promt , вычисление данных и проверка
Как сделать так , чтобы после того , как появилось: "Неверные входные данные" , пользователь вводил эту строку заново , а не переходил к заполнению следующей строки и еще вопрос , у меня почему-то переменная otvet вычисляет все то , что в скобках , а когда дело доходит до сложения , у меня вместо сложения просто добавления идет к значению startMoney, что-то такое 1100110 первые четыре это стартмоней , а последние три это вычисление в скобках?
function myFunction() {
var startMoney;
var years;
var percent;
var dayinyear = 365;
startMoney = prompt("Введите начальную сумму", '')
if (startMoney === '' || isNaN(startMoney) || startMoney <= 1000) {
alert('Неверные входные данные');
}
years = prompt("Введите срок", '')
if(years === '' || isNaN(years) || years < 1) {
alert('Неверные входные данные');
}
percent = prompt("Введите процент", '')
if (percent === '' || isNaN(percent) || percent > 100) {
alert('Неверные входные данные');
}
else{
alert("Начальная сумма: " + startMoney + " " + "Срок: " + years +" " + "Процент: " + percent);
let otvet = startMoney + ((startMoney * percent * years * dayinyear) / (dayinyear * 100));
alert(otvet);
}
}
Ответы (2 шт):
Можно заново вызывать эту же функцию, а чтобы не заполнять повторно правильные данные, передавать их в качестве аргумента и присваивать создаваемым переменным. Метод prompt возвращает строку, чтобы проводить вычисления нужно приводить к числу.
function myFunction() {
var startMoney = arguments[0] ? arguments[0] : undefined;
var years = arguments[1] ? arguments[1] : undefined;;
var percent;
var dayinyear = 365;
var abort = 'Неверные входные данные';
if(!startMoney) {
startMoney = Number(prompt("Введите начальную сумму", ''))
if (startMoney === '' || isNaN(startMoney) || startMoney <= 1000) {
alert(abort);
return myFunction()
}
}
if(!years){
years = Number(prompt("Введите срок", ''))
if(years === '' || isNaN(years) || years < 1) {
alert(abort);
return myFunction(startMoney)
}
}
if(!percent){
percent = Number(prompt("Введите процент", ''))
if (percent === '' || isNaN(percent) || percent > 100) {
alert(abort);
return myFunction(startMoney, years)
}
}
let otvet = startMoney + ((startMoney * percent * years * dayinyear) / (dayinyear * 100));
alert("Начальная сумма: " + startMoney + " " + "Срок: " + years +" " + "Процент: " + percent + "\nОтвет : "+ otvet);
}
myFunction()
Можно не вызывать одну и ту же ф-ию заново и заново, достаточно застрять на одном месте пока не будут введены нужные вам данные, чего можно легко добиться бесконечным циклом while
Пару замечаний:
После того как вы преобразуете строку в число
Number(prompt('...')), то не надо проверять является ли он пустой строкой. Это уже число, потому достаточно проверять проверкойisNan(). Но учтите, что пустая строка будет преобразована в0, потому вам это надо отдельно обрабатывать, если надо. Например когда вы просите проценты, то вы допускаете что было введено 0Вы умножали и делили на одинаковое число
dayInYear. Это бессмысленно, потому я убрал у себя это. Но возможно вам надо просто подправить формулу
Код:
const askNumber = (message) => Number(prompt(message));
const askSum = () => askNumber('Введите начальную сумму');
const askPeriod = () => askNumber('Введите срок');
const askPercent = () => askNumber('Введите процент');
const alertWrongData = () => alert('Неверные входные данные');
function myFunction() {
let startMoney = askSum();
while (isNaN(startMoney) || startMoney <= 1000) {
alertWrongData();
startMoney = askSum();
}
let years = askPeriod();
while (isNaN(years) || years < 1) {
alertWrongData();
years = askPeriod();
}
let percent = askPercent();
while (isNaN(percent) || percent > 100) {
alertWrongData();
percent = askPercent();
}
const answer = startMoney + startMoney * percent * years / 100;
alert(`Начальная сумма: ${startMoney} Срок: ${years} Процент: ${percent}
Ответ : ${answer}`);
}
myFunction();