Деление без остатка/ целочисленный остаток. Текстовый Калькулятор вкладов на JavaScript

Бывают случаи и необходимости, когда необходимо от программы получить целочисленный остаток от деления одного числа на другое. Это - довольно полезная штука в javaScript, которая позволит реализовать некоторые интересные вещи....

Давайте рассмотрим основные правила оператора %:

Оператор возвращает целый остаток от деления левого операнда на правый. Возвращаемое значение всегда получает знак делимого, а не делителя. Он использует встроенную функцию modulo, для получения результата, которая является целочисленным остатком деления var1 на var2 — например — var1 modulo var2.

Чем может быть полезно?

К примеру, при помощи данного оператора, мы можем автоматизировать вывод некоторых сообщений, сделав язык программы более человечным. То есть, к примеру, имеем переменную var years, которая показывает количество лет, проведенных за ковырянием в носу.

И нам необходимо вывести на экран сообщение, что 'UserName ковырял в носу '+years+' лет.'. Но будет совершенно некрасиво, если years будет равно 1,2,3 или 4, ведь в этом случае программа нам сообщит, что "UserName ковырял в носу 3 лет". Звучит некрасиво.

Вот тут и придет на помощь оператор %. Ведь вместо "лет" или "год" мы можем ввести еще одну переменную, которая будет принимать то или иное значение в зависимости от срока  переменной years.

Потому предлагаю соорудить примерно такую конструкцию....

if (years %10 ==1) {god=' год'}
else if ((years %10 >1)&&(years % 10<5)){god=' года'}
else {god=' лет'}

Иными словами, если деление значения на 10 дает остаток 1, то значение переменной god будет равно "год".

Если больше 1, но меньше 5, то "года"

В других случаях = "лет"

Эта нехитрый код в 3 строчки позволит нам вывести на экран alert с человеческим языком. Примерно так:

alert('UserName ковырял в носу '+years+ ' '+ god+'. ')

 

Калькулятор вкладов

несложная программка на JavaScript, призванная просчитать целесообразность внесения вклада на счет в банке под определенный процент. Возможно выбрать, сколько процентов годовых дает вклад, предполагаемую инфляцию и так далее....

Все выполнено в текстовом режиме prompt и alert'ами, но это сделано для тренировки ветвлений условных операторов if - else.

В принципе, программка для начинающих, ну а если непонятны основные команды, использованные в ней, то рекомендовал бы тогда ознакомиться с постом о текстовой JS игре "Русская рулетка", в которой они были довольно подробно разобраны.

Данная программа довольно громоздская для примера, но все же вполне интересна. Конечно, код мог бы быть и короче. но тут суть вся - в операторе % и его использовании....

<meta charset="utf-8">
<script>
var summa; //сумма вклада
var procent;//% годовых
var letv; //срок вклада
var mes; //ежемесячная капитализация
var vgod; //ежегодная капитализация
var cap; //капитализация
var capvar;
var err; //вопрос об ошибке
var dannie =0; //данные; 0 - данных нет; 1 - данные получены; 2 сброс
var itog; //итоговая сумма за год
var years; //прошло лет
var god; //год/лет/года
var daysperperiod; //Дней в периодичности капитализации
var numcap; //количество капитализаций за срок
var inflation; //инфляция
var realitog; //реальный итог
var vigoda;
alert('Вас приветствует калькулятор вкладов');
while(dannie==0){ //сумма вклада
summa = parseFloat(prompt('Введите желаемую сумму вклада'));
if ((summa<=0)||(isNaN(summa)))
{
err = parseInt(prompt('Неподходящее число. Будем продолжать? 1=да, остальное = нет'))
if (err != 1)
{throw "stop";}
}
else {dannie=1;}
}
dannie =0;
while(dannie==0){//срок вклада
letv = parseInt(prompt('Введите срок вклада, лет:'));
if ((letv<=0)||(isNaN(letv)))
{
err = parseInt(prompt('Не похоже, что это действительно срок вклада. Будем продолжать? 1=да, остальное = нет'))
if (err != 1)
{throw "stop";}
}
else {dannie=1;}
}
dannie =0;
while(dannie==0){ //ставка,%
procent = parseFloat(prompt('Банковская ставка, % годовых:'));
if ((procent<=0)||(isNaN(procent)))
{err = parseInt(prompt('Вы уверены, что указали банковскую ставку?. Будем продолжать? 1=да, остальное = нет'))
if (err != 1)

{throw "stop";}
}
else {dannie=1;}
}
dannie =0;
while(dannie==0){// капитализация. 1 = ежемесячная, 2 = ежегодная
cap = parseInt(prompt('Выберите капитализацию. 0= без капитализации. 1 = ежемесячная; 2 = ежегодная'))
if ((cap<0)&&(cap>2)||(isNaN(cap)))
{
err = parseInt(prompt('Вы уверены, что выбрали верный вариант капитализации? Будем продолжать? 1=да, остальное = нет'))
if (err != 1)
{throw "stop";}
}
else
{dannie=1;}
}
if (cap==0){capvar= 'отсутствует';}
else if(cap==1){capvar= 'ежемесячная'; daysperperiod=30; numcap=12;}
else {capvar = 'ежегодная'; daysperperiod=365; numcap=1;}
if (confirm('Вы указали следующие параметры:\n\ Сумма вклада: '+ summa + ' руб. \n\ Срок вклада (лет): ' + letv+ '\n\ Процентная ставка, годовых: '+procent+' %.\n\ Капитализация процентов: ' + capvar))
{
alert('Все данные введены. Считаем');
itog=summa;
for(years=1; years<=letv; years++)
{
if (years %10 ==1) {god=' год'}
else if ((years %10 >1)&&(years % 10<5)){god=' года'}
else {god=' лет'}
if (cap==0)
{
numcap=1
itog= summa*procent*years/100 + summa
}
else{
itog=Math.pow((1+((procent*daysperperiod)/(365*100))), numcap)*itog;
}
var itogfinal = itog-summa;
alert('Через '+years+ ' '+ god+' вы получите '+ itog.toFixed(2)+ ' руб, то есть '+ itogfinal.toFixed(2)+' руб в виде % (' + capvar + ' капитализация) + начальный вклад '+summa+' руб.');
}
alert('Таким образом, сделав вклад на этих условиях, за ' +letv + ' лет вы сможете получить дополнительно '
+ itogfinal.toFixed(2) + ' рублей.')
if (confirm('Хотите сравнить свой доход с инфляцией?'))
{
dannie=0;//инфляция проверка на число
while(dannie==0)
{
var inflation = parseFloat(prompt('Введите предполагаемый средний процент инфляции на период ' + letv +' '+ god+' (ежегодной)'));
if ((isNaN(inflation)))
{
err = parseInt(prompt('Неподходящее число. Будем продолжать? 1=да, остальное = нет'))
if (err != 1)
{throw "stop";}
}
else {dannie=1;}
itog=summa;
realsumma=summa;
for(years=1;years<=letv;years++)
{

if (years %10 ==1) {god=' год'}
else if ((years %10 >1)&&(years % 10<5)){god=' года'}
else {god=' лет'}
if (cap==0)
{
itog= summa*procent*years/100 + summa;
}
else{
itog=Math.pow((1+((procent*daysperperiod)/(365*100))), numcap)*itog;
}
var inflationindex=Math.pow((1+(inflation/100)), years);
realsumma= realsumma*((1-(inflation/100)));
realitog= itog/inflationindex;
vigoda = realitog-summa;
alert('Следовательно, через '+years+ ' '+ god+' вы получите '+ itog.toFixed(2)+ ' руб, но к тому времени сегодняшняя '+ summa+' руб в сегодняшних ценах будет эквивалентна ' + realsumma.toFixed(2)+ ' а значит, сумма вклада с точки зрения покупательной способности будет равна '+ realitog.toFixed(2)+' руб. \n\ Таким образом, за '+years+' '+god+ ' сумма капитала в результате инфляции изменится по сравнению с первоначальным вкладом ('+summa+') на ' + vigoda.toFixed(2) + ' руб');
}
}
if (letv %10 ==1) {god=' год'}
else if ((letv %10 >1)&&(years % 10<5)){god=' года'}
else {god=' лет'}
if (vigoda<=0){
alert('Вот и думайте, стоит ли оно того!')
}
else {
alert('Таким образом, за '+letv+' ' + god + ' вы реально сможете увеличить свой капитал на '+vigoda.toFixed(2)+ ' рублей')
}
}
}
else
{
throw "stop";
}
</script>

Скачать файл или рассчитать вклад можно по этой ссылке