Строит онлайн калькулятор: Онлайн калькулятор расчета количества газобетонных блоков

Содержание

Ипотечный калькулятор ставок — рассчитать ипотеку онлайн, расчет суммы ежемесячного платежа по ипотечному кредиту на квартиру

Принимая решение о покупке недвижимости в кредит, потенциальный заемщик должен предварительно рассчитать ежемесячный платеж по ипотеке, чтобы понимать уровень долговременной кредитной нагрузки. Размер выплат не должен превышать определенную долю от ежемесячных доходов потенциального заемщика, чаще всего – не более 50%. Зная возможный уровень платежей, потенциальный заемщик может самостоятельно рассчитать максимальный размер ипотеки, срок кредитования и переплату. Для расчета параметров ипотеки используется специальный калькулятор, доступный для всех.

Кредитный ипотечный калькулятор – это программа, содержащая в себе набор математических формул и используемая для определения существенных параметров кредита. Расчет платежей по ипотеке – важнейшая функция ипотечного калькулятора. Помимо платежа, программа позволяет рассчитать сумму ипотеки, срок, переплату и другие ключевые условия.

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

Калькулятор, рассчитывающий ипотеку, легко найти в Интернете.

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

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

Необходимо помнить, что расчет ипотеки, полученный на кредитном калькуляторе, который расположен на сторонних сайтах, не является окончательным.

Также рассчитать ипотеку можно непосредственно в банке. Менеджер даст профессиональную консультацию и рассчитает ипотеку на желаемую квартиру или другую недвижимость.

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

Прежде чем взять ипотеку на квартиру, потенциальные заемщики должны знать размер ежемесячных трат. Профессиональные сотрудники банков или агентств недвижимости рассчитывают размер суммы кредита по ежемесячному доходу клиента, который делится, как правило, на 2. Таким образом, получается максимальная сумма ежемесячных аннуитетных платежей. При расчете дифференцированного платежа схема немного иная: при делении на 2 получается сумма, подлежащая погашению в начальный период кредитования. Размер платежа при дифференцированном графике постепенно снижается и становится все меньше половины ежемесячного дохода, таким образом, свободные денежные средства можно отправлять на досрочное погашение. Сейчас согласно законодательству все кредиты оформляются с досрочным погашением без ограничений и комиссий.

Расчет платежей по военной ипотеке не имеет смысла, так как все выплаты осуществляет государство.

Потенциальные заемщики могут, используя универсальный калькулятор Банки.ру, понять, сколько дадут им денег в ипотеку. Сервис позволяет рассчитать сумму платежа по зарплате, используя вышеописанную методику вычисления. Также с помощью поиска Банки.ру можно подобрать кредит на необходимую сумму, с конкретным первым взносом. В 2014 году на ипотечном рынке представлено достаточно предложений без первоначального взноса.

Публикация: 25.12.2019

Изменено: 25.12.2019

Онлайн калькулятор расчета бруса на дом. Расчет бруса на строительство дома

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

Информация по назначению

В данном калькуляторе для расчета учтены все возможные виды бруса, а именно:

  • Брус естественной влажности;
  • Сухой брус;
  • Профилированный брус естественной влажности;
  • Профилированный брус сухой;
  • Клееный брус.

Так же можно узнать количество бруса, необходимое для строительства внутренних перегородок. В калькуляторе расчета бруса предусмотрено определение типа и количества крепежа, пропитки для защиты древесины и утеплителя. Есть возможность понять ориентировочные затраты на брус и расходные материалы, необходимые для строительства дома. Площадь дверей и площадь окон намеренно не вычитаются, так как их необходимо выпиливать после усадки строения (в дверных проемах выпиливается частично для организации прохода).

Онлайн калькулятор расчета бруса определяет нагрузку от стен из бруса на фундамент, что немало важно на этапе планирования строительства. Данный строительный калькулятор позволит избежать лишних расходов на закупку стройматериалов и избежать проблем с их нехваткой в ходе строительства дома.

Исходные данные

Исходные данные для расчёта бруса в онлайн калькуляторе и их описание:

  1. Необходимо сложить длины всех наружных стен (например дом 6х6, 6+6+6+6=24) единица измерения метры. Дверные и оконные проемы не учитываются, так как обычно выпиливаются по месту после усадки строения.
  2. Введите параметр высота конструкции по углам, единицы измерения- метры. В случае если высота стен разная, укажите среднюю высоту(сложите высоты стен и поделите на их количество).
  3. При желании учесть внутренние перегородки введите их количество, если внутренние перегородки учитывать не надо, оставьте значение «0».
  4. Введите параметр высота внутренней перегородки, единицы измерения — метры.
  5. Введите параметр длина внутренней перегородки, единицы измерения — метры.
  6. Выберите тип бруса, который используется для строительства. В зависимости от типа бруса будет произведен расчет веса конструкции и ориентировочной усадки строения.
  7. Выберите размер сечения бруса (при необходимости задайте свои значения в следующем порядке ВхШхД) единицы измерения миллиметры.
  8. При желании узнать стоимость необходимого количества бруса для строения введите цену за 1 м3. Не обязательный параметр. Единица измерения — рубли.
  9. Выберите крепление для бруса (нагель или пружинный узел сила).
  10. При желании узнать стоимость необходимого количества крепления для данного строения из бруса введите цену за 1 шт. Не обязательный параметр. Единица измерения — рубли.
  11. При желании узнать стоимость необходимого количества пропитки для огнебиозащиты строения из бруса введите цену за 1 литр. Не обязательный параметр. Единица измерения — рубли.
  12. При желании узнать стоимость необходимого количества рулонного утеплителя для строения из бруса введите цену за 1 метр погонный. Не обязательный параметр. Единица измерения — рубли.

Результат расчета

Описание результатов расчета бруса в онлайн калькуляторе:

  1. Общая длина наружных стен — параметр, который задается пользователем, Равен периметру строения из бруса
  2. Высота конструкции по углам- параметр задаваемый пользователем,
  3. Количество венцев на наружные стены — количество горизонтальных рядов из бруса, заданного размера, которое подходит для заданной высоты стронция.
  4. Количество бруса на наружные стены- требуемое количество бруса в штуках для возведения наружных стен в строении из бруса по указанным параметрам
  5. Количество внутренних перегородок — параметр задаваемый пользователем.
  6. Объем общего количества бруса — объем всего бруса, необходимый для строительства объекта по заданным параметрам, в том числе и на внутренние перегородки (при указании их в исходных данных для расчета). Единицы измерения м3.
  7. Вес общего количества бруса — вес всего объема бруса, необходимого для строительства объекта по заданным параметрам. Единицы измерения кг.
  8. Усадка (в см на 1 метр строения) — ориентировочная усадка в сантиметрах на 1 метр высоты строения указанного вида бруса.
  9. Ориентировочная усадка строения — ориентировочная величина общей усадки строения, по заданным параметрам.
  10. Общее количество крепление для бруса — ориентировочное количество выбранного крепления для бруса, которое понадобится для возведения строения. Единица измерения штуки.
  11. Общее количество рулонного утеплителя — ориентировочное количество утеплителя, которое понадобится для строительства объекта по заданным параметрам. Единица измерения метры погонные.
  12. Ориентировочное количество пропитки (с учетом обработки всей площади поверхности бруса) — необходимый ориентировочный объем огнебиозащиты для пропитки бруса, единицы измерения литры.
  13. Нагрузка на фундамент от стен- данный параметр необходим для выбора фундамента. Приведен без учёта веса перекрытий и крыши.

рассчитать деревянный дом или баню в Москве

  • Тип строения

    *

  • Технология

    *

    Проф. брус естественной влажности Сухой профилированный брус Из обычного бруса (нестроганного) Домокомплект из сухого бруса с рубкой «в чашу» По каркасной технологии

  • Комплектация

    *

  • Комплектация

    *

  • Тип проекта

    *

    Типовой проект с нашего сайта Свой собственный проект Типовой проект с другого сайта

  • Ссылка на проект

    *

  • Этажность

    *

    Один этаж С мансардой В полтора этажа Два этажа

  • Длина в метрах
  • Ширина в метрах
  • Проект дома

    *

    4х5 «Радимир» 4х5 «Светозар» 6.5х6.5 «Радислав» 6х6 «Богомил» 6х6 «Доброслав» 6х6 «Драгомир» 6х6 «Зоран» 6х6 «Любиград» 6х6 «Мирослав» 6х6 «Мыслимир» 6х6 «Самовлад» 6х6 «Хотемир» 6х6 «Часлав» 6х7 «Искрен» 6х7 «Ярослав» 6х7.5 «Станислав» 6х7.55 «Станимир» 6х8 «Велислав» 6х8 «Волибор» 6х8 «Ладимир» 6х8 «Любослав» 6х8 «Маломир» 6х8 «Мечислав» 6х8 «Ратимир» 6х8 «Светоcлав» 6х8 «Томислав» 6х8 «Чернек» 6х8 «Честимир» 6х9 «Властимир» 6х9 «Путимир» 6х9 «Святополк» 6х9 «Унислав» 7.5х7.5 «Милодух» 7.5х8 «Строимир» 7х12 «Путислав» 7х8 «Добровлад» 7х8 «Златомир» 7х8 «Креслав» 7х8 «Пересвет» 7х8 «Преслава» 7х8 «Святослав» 7х8 «Твердимир» 7х8 «Творимир» 7х9 «Атаман» 7х9 «Духовлад» 7х9 «Звенимир» 7х9 «Истислав» 7х9 «Остромир» 7х9 «Яромир» 8х10 «Добромил» 8х14 «Берислав» 8х14 «Яробуд» 8х6 «Вячеслав» 8х7.5 «Лютовлад» 8х8 «Горислав» 8х8 «Казимир» 8х8 «Росслав» 8х8 «Татимир» 8х8 «Третьяк» 8х9 «Гостемил» 8х9 «Судислав» 9х10 «Родовлад» 9х9 «Клонимир» 9х9 «Мстислав» 9х9 «Тихомир» 9х9.5 «Градислав» 10х10 «Светислав» 10х13 «Славомир» 11.5х10 «Слободан» 11х12 «Градимир»

  • Проект бани

    *

    4х4 «Белослава» 4х5 «Бажена» 4х5 «Златоцвета» 4х6 «Борислава» 4х6 «Братислава» 4х6 «Мирослава» 4.7х4 «Ангелия» 5х6 «Забава» 5х6 «Искра» 5х6 «Лана» 5х6.5 «Любава» 5х7 «Нежана» 6х5.5 «Драгомира» 6х6 «Велимира» 6х6 «Вера» 6х6 «Горислава» 6х6 «Градислава» 6х6 «Радимира» 6х7 «Воислава» 6х7.5 «Снежана» 6х8 «Дарина» 6х8 «Казимира» 6х8 «Преслава» 6х9 «Добромила» 8.5х10.5 «Людмила»

  • Сечение бруса (толщина стен)

    *

    90х140 (100 мм) 140х140 (150 мм) 190х140 (200 мм)

  • Толщина наружных стен с утеплителем

    *

    100 мм 150 мм 200 мм

  • Фундамент

    *

    Не нужен (уже есть) Свайно-винтовой Опорно-столбчатый из блоков Ленточный Монолитная плита

  • Высота потолка 1 этажа (кол-во венцов)

    *

    2.2 м (16 венцов) 2.35 м (17 венцов) — стандарт 2.5 м (18 венцов) 2.65 м (19 венцов)

  • Высота потолка 1 этажа (кол-во венцов)

    *

    2.2 м (16 венцов) — стандарт 2.35 м (17 венцов) 2.5 м (18 венцов) 2.65 м (19 венцов)

  • Внутренняя отделка

    *

    Вагонка камерной сушки, сорт «В» (стандарт) Вагонка камерной сушки, сорт «А» Имитация бруса Блок-хаус Свой материал (оплачивается только работа)

  • Наружная отделка

    *

    Вагонка естественной влажности, сорт «В» Имитация бруса Блок-хаус Фасадные панели Свой материал (оплачивается только работа)

  • Обшивка фронтонов

    *

    Вагонка естественной влажности, сорт «В»
    (стандарт)
    Имитация бруса Блок-хаус

  • Утеплитель в стенах

    *

  • Утепление полов

    *

    Knauf 50 мм Knauf 100 мм Knauf 150 мм Knauf 200 мм Rockwool 50 мм Rockwool 100 мм Rockwool 150 мм Rockwool 200 мм

  • Утепление кровли

    *

    Knauf 50 мм Knauf 100 мм Knauf 150 мм Knauf 200 мм Rockwool 50 мм Rockwool 100 мм Rockwool 150 мм Rockwool 200 мм

  • Утепление фронтонов

    *

    Knauf 50 мм Knauf 100 мм Knauf 150 мм Knauf 200 мм Rockwool 50 мм Rockwool 100 мм Rockwool 150 мм Rockwool 200 мм

  • Кровля

    *

    Ондулин Металлочерепица (бесплатно от 650 т.р.) Не нужна (зашивается рубероидом) Свой материал (оплачивается только работа)

  • Окна

    *

    Деревянные, двойного остекления (стандарт) Пластиковые однокамерные Пластиковые двухкамерные Пластиковые трехкамерные Не нужны Собственные окна (оплачивается установка)

  • Сборка сруба

    *

    На гвозди (стандарт) На деревянные нагели

  • Свесы

    *

    В 3 вагонки (стандарт) В 4 вагонки В 5 вагонок В 6 вагонок В 7 вагонок

  • Печь

    *

    Ермак-12 Ермак-12 Элит Ермак-16 Ермак-16 Элит Ермак-20 Ермак-20 Элит Не нужна Своя печь (оплачивается только установка)

  • Дополнительные услуги
  • Дополнительные услуги
  • Дополнительные услуги
  • Дополнительная информация

    Любая информация о планируемом строительстве. Необязательно.

  • Загрузите файлы (не обязательно)
  • Как к Вам обращаться
  • Ваш телефон

    *

    Для уточнения всех нюансов.

  • Ваша почта (не обязательно)

    Для подробного отчета о стоимости.

  • Адрес строительства

    Для расчета стоимости доставки.

  • roistat
  • Посчитать стоимость

  • Should be Empty:
  • Онлайн-калькулятор ЛСТК

    Рассчитайте бесплатно самостоятельно, всего за 5 минут:

    • Массу металлоконструкций
    • Актуальную стоимость металлокаркаса ЛСТК
    • Стоимость проекта из разделов КМ, КМД
    • Получите консультацию специалиста

    Онлайн-калькулятор ЛСТК производит расчет металлокаркасов разрабатываемых по панельной технологии ЛСТК на основе термопрофилей или обычных профилей. Данные металлоконструкции подходят для строительства домов, коттеджей и других малоэтажных зданий с насыщенной внутренней планировкой на основе ЛСТК.

     

    Для расчета стоимости большепролетных зданий рамного типа — ангаров, складов и других быстровозводимых сооружений из металлоконструкций, сэндвич-панелей, профилированного листа воспользуйтесь онлайн-калькулятором зданий.

    КАЛЬКУЛЯТОР ЗДАНИЙ

    ОНЛАЙН КАЛЬКУЛЯТОР ЛСТК

    Результаты расчета автоматически отправляются на указанную Вами почту в конце формы

     

     


    Строите из ЛСТК или только планируете?

    Не забудьте приобрести специализированный крепеж для монтажа!

    Долговечность и надежность металлокаркаса зависит от качества применяемого крепежа. Мы поставляем на строительные объекты профессиональные саморезы для ЛСТК по ценам обычных. Плоская головка, сверлоконечное острие, двойное антикоррозионное покрытие: цинк с толщиной слоя 15 мкм и композиционный состав Ruspert® Type II Gray E-Coat с толщиной слоя 30 мкм, гроверная насечка под головкой самореза против проворачивания и откручивания. Отправляем саморезы в регионы.
    Профессиональный крепеж доступный каждому! Стройте надежно!


    В калькуляторе учтены ограничения ЛСТК технологии, обусловленные техническими характеристиками тонкостенного профиля:

    • Максимальное количество этажей – 3эт.
    • Максимальная высота каждого этажа – 4000мм
    • Максимальный пролет балки межэтажного перекрытия (без опор) – 6500мм
    • Максимальный пролет кровельной фермы (без опор) – 10000мм

    Расчет ЛСТК каркаса производится для наиболее распространенной конструктивной схемы:

    • Внешние стены – термопрофиль 200-150мм х 1,2-1,5мм
    • Внутренние стены — профиль 150-100мм х 1,0-1,5мм
    • Балки половых и межэтажных перекрытий – профиль 200-250мм х 1,5-2,0мм
    • Кровельные фермы – профиль 50-100мм х 1,5-2,0мм
    • Каркас потолка под фермами, для закладки минераловатного утеплителя – 100-200мм х 1,0-1,5мм

    Конструкции предназначены для строительства зданий с наборным пирогом стен и перекрытий, с шагом элементов 600мм, по ширине стандартного мата минераловатного утеплителя.

    Онлайн калькулятор расчета блоков | BELBLOCK®

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

    Для этого можно воспользоваться нашим удобным онлайн калькулятором или же рассчитать количество блоков самостоятельно.

    Методика расчета керамзитных блоков

    Как пример одноэтажный дом с фронтонами и межкомнатной перегородкой. Пусть этот дом будет квадратной формы с длиной каждой стены 10 метров и высотой равной 2,8 метров. У дома есть два окна 1,6×1,4 метра и входная дверь 1×2 метра.

    Расчет для периметра здания

    Толщина наружных стен составляет 19 см (половина блока). Снаружи этот домик облицован фасадным кирпичом. Поэтому длина каждой керамзитной стены станет на 30 см меньше, чем на плане здания. Эти 30 см займут утеплитель и облицовочный кирпич – по 15 см с каждого из двух концов стены.

    1. Находим общий периметр керамзитных стен: (10 – 0,15*2)*4=38,8 м.
    2. Допустим, длина одного керамзитного блока вместе со швом составляет 40 см. Сколько блоков нужно для одного ряда стен: 38,8/0,4=97 штук.
    3. Высота выбранного блока составляет 20 см. Находим количество рядов: 2,8/0,2=14 рядов.
    4. Находим общее число блоков для периметра: 97*14= 358 штук.
    5. Сколько блоков занимает одно окно? В длину 1,6/0,4=4 штуки. В высоту 1,4/0,2=7 штук. Два окна:4*7*2=56 блоков.
    6. Далее выполняется расчет для входной двери. В длину:1/0,4=2,5 штук. В высоту2,0/0,2 = 10 штук. Дверь занимает 2,5*10=25блоков.
    7. Вычитаем объем пустот дверей и окон: 1358-56-25=1277 блоков требуется для кладки наружных стен.

    Расчет для внутренних стен

    Теперь нужно рассчитать количество керамзитных блоков для стены внутри дома. Расчет производится в той же последовательности. В нашем примере длина внутренней стены составляет 9,2 метра, толщина – 0,4 метра (1 блок). В стене есть дверь с габаритами 1×2 м.

    1. Количество керамзитных блоков по длине стены: 38,8/0,2 = 46. В данном случае мы делим длину стены на ширину блока вместо длины, так как блоки будут уложены поперек.
    2. Количество рядов – 14, поскольку высота внутренней стены равна высоте наружных. Итого для кладки стены нужно 14*46 = 644 керамзитных блока.
    3. Объем двери рассчитывается иначе, чем для наружных стен. Нужно учитывать направление кладки блоков. По длине 1/0,2 = 5штук. По высоте 2,0/0,2 = 10 штук. Дверь занимает 5*10 = 50 блоков (вместо 56 для наружной двери).
    4. Находим итоговое количество блоков: 644–50 = 596 штук.

    Расчет материала для фронтонов

    В примере высота фронтона 2 метра, а длина также составляет 9,7 метра. Расчеты выполняются согласно геометрическим формулам, по которым общая площадь фронтонов равна площади одной стены 9,7×2 метра.

    1. Рассчитываем количество блоков для двух фронтонов: (9,7/0,4)*(2,0/0,2)= 242,5 блока.
    2. Кладку начинают с полного ряда. Периметр стен составляет 97 блоков, а два полных ряда – 48,5 штук.Итого требуется: 242,5+48,5=291 штука.
    3. Посколькублоки при кладке фронтонов распиливаются, следует купить их с небольшим запасом. Округлим полученное значение до 300 штук. Это количество учитывает кладку обоих фронтонов.

    Подведем итоги

    На последнем этапе нужно сложить все полученные значения: 1277+596+300 = 2171 керамзитных блоков. Именно столько потребуется для строительство нашего гипотетического дома.

    Используя приведенную методику, вы сможете самостоятельно рассчитывать количество строительного материала для проекта дома любой сложности. Полученное в итоге число рекомендуется умножить на 1,05 или 1,07, чтобы создать небольшой запас строительного материала. Можно округлить количество блоков до целого поддона.

    Калькулятор забора — онлайн расчет стоимости забора

    Итак, вы решили заказать строительство забора в Москве, области и близлежащих регионах, но предварительно хотите узнать точную стоимость до начала работ? Никаких проблем! Мы предоставляем вам удобный расчет стоимости с помощью калькулятора.

    Благодаря калькулятору вы сможете в минимальное время рассчитать, сколько будет стоить строительство нового забора, указав все необходимые параметры. Простая формула подсчета, простой интерфейс калькулятора и минимум необходимых данных – все это делает расчеты удобными и быстрыми.

    Для более детального рассчета перейдите на страницу калькулятора нужного вам забора:

    Если желаете получить более точный расчет для нестандартных конструкций, заполните следующие поля:

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

    Так как в данном случае наши специалистамы считают вручную, это требует больше времени, зато вы сможете узнать максимально точную стоимость нестандартных конструкций заборов с учетом всех особенностей строительства. У нас вас ждут более приятные цены, чем у большинства конкурентов, предлагающих строительство металлических заборов в Москве и области.

    Ответы на часто задаваемые вопросы:

    • Может ли итоговая стоимость отличаться от первоначальных расчетов на калькуляторе?
      Если все данные введены правильно, погрешность минимальна. Корректировка цены возможна только при условии, что данные введены неверно.
    • Сколько времени требуется на расчет стоимости менеджером?
      Если вы обращаетесь по телефону, мы рассчитаем стоимость забора за пару минут. Если предпочитаете получить все расчеты на почту, они будут отправлены в течение дня или, а если заявка на расчет поступила в нерабочее время, — отправим в ближайший рабочий день.
    • Что делать, если я не знаю всех параметров для будущего строительства?
      Вы можете связаться с нашим менеджером, чтобы обсудить любые детали и проконсультироваться, как сделать необходимые замеры и на что обратить внимание для точности расчетов: площадка, условия, материалы, тип почвы, ветровая нагрузка и уклон участка.

    Онлайн калькулятор строительства дома — Строительство домов

    Перед тем как планировать бюджет строительства дома, позвонив в одну компанию, другую, и столкнувшись с тем, что 95% всех строительных компаний просят оставить свои контакты, номер телефона, адрес электронной почты… Хотелось бы для начала просто для себя понять приблизительную стоимость строительства своего дома, не оставлять на каждом сайте свои данные, ведь возможно строительство дома пока еще только в планах, а почти все строительные компании, оставив вы им на сайте свой номер телефона или электронную почту, в итоге завалят вас предложениями.

    Калькулятор строительства дома на сайте ООО «Нибулон»

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

    Что считает онлайн калькулятор строительства дома у нас на сайте?

    Наш онлайн калькулятор рассчитывает минимальные параметры дома 5х5 метров, максимальные 20х20 метров. Есть возможность выбора фундамента:

    • монолитная железо-бетонная плита,
    • свайно-ростверковый фундамент,
    • ленточный фундамент.

    Но сразу хотелось бы подчеркнуть что для выбора фундамента нужно сделать геологические изыскания грунта, отдать на анализ в лабораторию, и только после этого конструктор компании «Нибулон» сможет правильно рассчитать нагрузки и подобрать правильный тип фундамента. Также на онлайн калькуляторе вы можете выбрать этажность дома, от одноэтажного до трехэтажного с мансардным этажом. Есть выбор основного материала стен, таких как; стены из газобетонных блоков, стены из керамического блока, стены из полнотелого кирпича. Выбор междуэтажного перекрытия из деревянных балок, железо-бетонные плиты перекрытия, полноценное монолитное перекрытие. Выбор количества окон на этаж. Выбор кровельного покрытия крыши.

    Полноценные два этажа или один с мансардным?

                                                                  

    Полноценные этажи дома – это когда каждый этаж например по 2.8-3 метра, а когда второй этаж мансардный (что на практике выбирают 80% наших клиентов, из-за небольшой стоимости), это высота боковых стен дома (аттиковых) например 1500 мм. а дальше идет кровля, в итоге у вас у края стен получается высота потолка 1500 мм, а в центре дома эта высота уже достигает 3.5-4 полноценных метра. Поэтому спрос на такие дома больше чем на полноценные двухэтажные.

    Онлайн калькулятор строительства бесплатно и без регистрации

    На сайте нашей компании ООО «Нибулон» вы можете рассчитать приблизительную стоимость строительства вашего дома без каких либо обязательств и регистраций, поэтому заходите, пользуйтесь. Если возникли сложности по работе с калькулятором, пишите в комментарии (но для этого вам уже придется оставить адрес вашей электронной почты))).

     

    Создать интерактивный калькулятор бесплатно

    keyboard_arrow_left
    Вернуться к базе знаний

    keyboard_arrow_left
    Вернуться к базе знаний

    Добро пожаловать в Calconic, наш инновационный конструктор калькуляторов! В этой статье показано, как шаг за шагом создать свой первый интерактивный калькулятор. Здесь мы собираемся построить прямоугольный калькулятор объема.

    Вам понадобится активная учетная запись Calconic, чтобы начать создавать свой первый интерактивный калькулятор.Если у вас его еще нет, создайте его. Это абсолютно бесплатно, и, кроме того, для каждой новой регистрации мы предлагаем доступ ко всем нашим премиум-функциям в течение 14 дней, чтобы вы могли опробовать все функции Calconic и ознакомиться с нашим инновационным конструктором калькуляторов.

    Приступим к созданию вашего первого интерактивного калькулятора!

    1. Войдите в свою учетную запись Calconic. Или получите бесплатную учетную запись прямо сейчас!
    2. Щелкните Создать новый в меню слева.
    3. Чтобы создать собственный интерактивный калькулятор, щелкните Создать из пустого .
    4. Щелкните значок Plus (Добавить новый элемент) справа.
    5. Здесь вы можете увидеть список различных типов полей ввода и инструментов, которые можно добавить в ваш интерактивный калькулятор. На этот раз давайте выберем Числовое поле ввода .
    • ПРИМЕЧАНИЕ: Все настройки элемента калькулятора доступны с правой стороны.Чтобы добраться до них, просто нажмите на элемент, который хотите настроить.
    1. Вы можете изменить метку числового поля ввода, добавив предпочтительное имя в поле ввода под меткой элемента Метка . Например, на этот раз давайте добавим Ширина в качестве имени поля ввода.

    2. В мин. и Макс. поля ввода, вы можете установить наименьшее и наибольшее значение, которое может быть добавлено в поле ввода пользователем.Если вы не хотите устанавливать какие-либо ограничения, оставьте эти поля ввода пустыми. Хотя ширина прямоугольника не может быть отрицательной, и мы не хотим, чтобы предел был установлен на самом высоком значении, давайте добавим 0 к Min. поле ввода и оставьте Макс. поле ввода пустое.

    3. Чтобы объяснить своим посетителям, какие данные вы хотите, чтобы они вводили, вы можете добавить префикс или постфикс в поле ввода. В нашем примере мы хотим, чтобы посетители вводили размер в футах, поэтому давайте добавим футов в поле ввода под меткой Postfix .

    4. Когда мы закончили с нашим первым полем ввода, давайте добавим второе поле ввода для прямоугольной длины. Щелкните значок Plus (Добавить новый элемент) справа и снова выберите Числовое поле ввода .

      1. Повторите шаги 6, 7 и 8, чтобы настроить это поле ввода. Однако добавьте Length в качестве метки этого поля ввода вместо Width .
    5. Чтобы добавить третье поле ввода для прямоугольной высоты, щелкните значок Plus и на этот раз выберите Slider .Это не типичное поле ввода для калькулятора объема, но мы хотим показать вам, как различные типы полей ввода могут формировать ваш интерактивный калькулятор.

    6. Назовите поле ввода, добавив Высота в поле ввода под Метка элемента .

    7. Установите диапазон слайдера, добавив мин. и Макс. значений. Обратите внимание, что ползунок Мин. и Макс. Поля ввода не могут быть пустыми! Добавьте 0 как Мин.значение и 1000 как Макс. ценить.

    8. Вы можете добавить к слайдеру точки, чтобы им было удобнее пользоваться и он выглядел лучше. Все точки разделяются запятыми. Добавим в ваш слайдер следующие точки — 0, 250, 500, 750, 1000 .

    9. Завершите настройку ползунка, добавив постфикс. Для этого добавьте футов в поле ввода под меткой Postfix .

    10. Теперь, когда вы закончили со всеми необходимыми полями ввода, давайте добавим элемент, который выводит результаты вашего интерактивного калькулятора.Для этого щелкните значок Plus (Добавить новый элемент) справа и выберите Формула .

    11. Назовите поле формулы, добавив Объем прямоугольного резервуара в поле ввода метки элемента .

    12. Добавьте следующую формулу в поле ввода под меткой Редактор формул # 1 * # 2 * # 3 . Как получить эту формулу? Каждому элементу калькулятора присваивается собственный идентификатор, состоящий из хэштега и уникального номера.Как видите, ID поля ввода Width — # 1, а ID ползунка — # 3. Обычная формула для определения объема прямоугольной призмы следующая: Объем = Длина Высота Ширина. Поэтому мы заменяем переменные длины, высоты и ширины идентификаторами элементов веб-калькулятора. Щелкните здесь, чтобы получить дополнительную информацию о том, как понимать и писать формулы для интерактивных калькуляторов Calconic.

    13. Завершите настройку элемента формулы, добавив постфикс.Для этого добавьте sq. футов ‘в поле ввода под меткой Postfix .

    14. Щелкните значок шестеренки .

    15. Добавьте предпочтительный заголовок в поле ввода под меткой Calculator Title .

    16. Нажмите Сохранить .

    17. Щелкните значок Неактивен рядом с кнопкой Сохранить , чтобы активировать онлайн-калькулятор.

    18. Теперь ваш интерактивный калькулятор готов для встраивания на ваш сайт.Нажмите кнопку Встроить , чтобы получить фрагмент кода для встраивания калькулятора на свой веб-сайт.

    19. Нажмите + Новый сайт , чтобы внести адрес своего веб-сайта в белый список. Любые поддомены (например, subdomain.example.com ) должны быть внесены в белый список отдельно.

    20. Щелкните Далее .

    21. Скопируйте фрагмент кода веб-калькулятора. Следующим шагом после копирования фрагмента кода будет его вставка в исходный HTML-код вашей страницы.Как вы это сделаете, будет зависеть от инструментов, которые вы используете для редактирования своего сайта. В нашей базе знаний вы можете найти несколько руководств о том, как встроить интерактивный калькулятор в системы DIY, такие как Squarespace, WIX, Weebly, Webflow и т. Д.

    Нужна помощь в создании вашего первого веб-калькулятора? Свяжитесь с нами по электронной почте [email protected] . Или вы можете использовать нашу библиотеку шаблонов калькуляторов для быстрого старта!

    Общие вопросы и ответы

    Что такое интерактивный калькулятор?

    Интерактивный калькулятор — это виджет, который можно встроить в любую веб-страницу.Он позволяет посетителям вашего веб-сайта вводить личные данные и выбирать из множества вариантов для расчета цены вашей услуги, рентабельности инвестиций или любых других показателей на основе вашей пользовательской формулы.

    Каковы преимущества использования интерактивного калькулятора на моем веб-сайте?

    Веб-калькулятор позволяет потенциальным клиентам принимать обоснованные решения и, в конечном итоге, облегчить их переход от корзины покупок к кассе. Другими словами, веб-калькулятор помогает упростить и прозрачность ценообразования, автоматизировать вашу работу, собрать потенциальных клиентов и повысить вовлеченность клиентов.

    Могу ли я создать интерактивный калькулятор бесплатно?

    Да. CALCONIC_ предлагает бесплатный план для всех пользователей Calculator Builder. Кредитная карта не требуется.

    Какие примеры веб-калькулятора?

    Топ-5 наиболее часто используемых веб-калькуляторов: калькуляторы цен, калькуляторы рентабельности инвестиций, калькуляторы ссуды, ипотечные калькуляторы, калькуляторы сбережений. С помощью CALCONIC_ Calculator Builder вы можете создать практически любой индивидуальный калькулятор, который соответствует вашим потребностям.

    Как создать свой собственный онлайн-калькулятор рентабельности инвестиций — Часть первая

    Клиенты хотят получить прибыль.Наша работа — сформулировать это.

    Я работаю как с продуктовыми компаниями, так и с цифровыми агентствами. То же самое верно для всех — уровень конкуренции там сумасшедший. А это значит, что нам нужно четко сформулировать нашу ценность. Один из самых простых способов сделать это — создать свой собственный калькулятор.

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

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

    Понимание формулы рентабельности инвестиций

    На самом деле вы не сможете создать свой собственный калькулятор, который поможет клиенту понять рентабельность инвестиций при найме вас или покупке вашего продукта, если вы не знаете формулы.

    Самый простой способ думать о формуле — это доход, разделенный на инвестиции. Изображение ниже показывает это с чуть большей глубиной.Получите прибыль и вычтите свои вложения. Это ваше настоящее возвращение. Затем разделите его на свои вложения. Но затем умножьте это на 100, чтобы это был процент, и его было легко понять.

    Давайте рассмотрим эту формулу на трех различных примерах, чтобы увидеть, как она будет работать в нашем калькуляторе ROI.

    Пример первый: обучение / онлайн-курс

    Допустим, вы продаете курс. Стоит 1500 долларов. Но все, кто его берет, говорят, что экономят 2 дня в месяц. Предположим, что это экономия 10%.И если средний человек, проходящий курс, зарабатывает 75 000 долларов, то это возврат 7 500 долларов.

    Итак, ROI = (7500-1500) / 1500 * 100 = 400%

    Пример 2: Услуги по разработке программного обеспечения

    Допустим, вы создаете какое-то специальное программное обеспечение. Это программное обеспечение позволит клиенту иметь более тесную интеграцию с интернет-магазином (например, Amazon или Walmart), чтобы в статьи на их сайтах можно было встраивать их продукты с ценами в реальном времени и доступностью для увеличения дохода партнерской программы.Стоимость проекта 100 000 долларов. Но это увеличит их партнерский доход до 250 000 долларов в месяц со 100 000 долларов.

    Теперь нам нужно рассчитать возврат этих инвестиций, и для этого примера давайте рассчитаем его за трехмесячный период. Таким образом, они будут увеличивать свой доход на 150 000 долларов каждый месяц в течение 3 месяцев. Это 450 000 долларов. (И это только на 1 квартал!)

    Итак, ROI = (450000 — 100000) / 100000 * 100 = 350%

    Пример третий: продажа продукта

    В нашем последнем примере мы будем продавать недорогой продукт, который стоит 20 долларов в месяц.Это может быть что угодно, но поскольку мне очень нравятся лучшие отзывы, которые я когда-либо видел, я подумаю о чем-нибудь подобном. Предположим, наличие отзывов на сайте не только повысит рейтинг вашего посетителя, но и повысит ваш показатель закрытия. Как мы вычислим?

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

    ((посетители * процент от посетителя до лида * 1,15) * (коэффициент отведения до закрытия * 1,15) * прибыль на заказ) — 20/20 * 100

    Сложность калькулятора рентабельности инвестиций

    Вы уловили сложность, когда я переходил от одного примера к другому?

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

    А правда в том, что все еще более тонко.

    Давайте еще раз посмотрим на простой пример (номер один).

    Каждый, кто проходит этот курс, экономит 2 дня? Что, если бы мы сегментировали наших клиентов по типу ролей (старший исполнительный директор, менеджер среднего звена, непосредственный сотрудник)? Обнаружим ли мы, что разные люди откладывают разные суммы?

    Кроме того, прибыль будет разной, потому что эти разные роли часто получают разную сумму для своей зарплаты.А это означает, что расчет доходности меняется в зависимости от их роли.

    Какие нюансы во втором примере?

    Я не знаю, как вы, но в большинстве случаев, когда я составляю оценку для клиента, я не могу с уверенностью предсказать результаты, которые они получат от использования созданного нами программного обеспечения.

    Что делать, если развертывание программного обеспечения задерживается? Что, если результаты будут неоднородными — такими, что нам нужно принять во внимание некоторую изменчивость, связанную с сезонами?

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

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

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

    Подпишитесь на бесплатный контент. Люди до сих пор так делают.

    Тысячи людей (7000+) регулярно получают мои сообщения в свой почтовый ящик. Бесплатно.

    Спасибо! Теперь проверьте свою электронную почту.

    Как создать приложение калькулятора HTML с нуля, используя JavaScript

    Это эпическая статья, в которой вы узнаете, как построить калькулятор с нуля. Мы сосредоточимся на JavaScript, который вам нужно написать: как подумать о создании калькулятора, как написать код и, в конечном итоге, как очистить свой код.

    К концу статьи вы должны получить калькулятор, который работает точно так же, как калькулятор iPhone (без функций +/- и процентов).

    Предварительные требования

    Прежде чем пытаться продолжить урок, убедитесь, что вы хорошо владеете JavaScript. Как минимум, вам необходимо знать следующее:

    1. Операторы If / else
    2. Для циклов
    3. Функции JavaScript
    4. Стрелочные функции
    5. && и || Операторы
    6. Как изменить текст с помощью свойства textContent
    7. Как добавить прослушиватели событий с шаблоном делегирования событий

    Перед тем, как начать

    Я настоятельно рекомендую вам попробовать собрать калькулятор самостоятельно, прежде чем продолжить урок.Это хорошая практика, потому что вы научитесь думать как разработчик.

    Вернитесь к этому уроку после того, как вы попробовали в течение одного часа (неважно, удастся ли вы или нет. Когда вы пытаетесь, вы думаете, и это поможет вам усвоить урок в два раза быстрее).

    Итак, давайте начнем с понимания того, как работает калькулятор.

    Создание калькулятора

    Во-первых, мы хотим построить калькулятор.

    Калькулятор состоит из двух частей: дисплея и клавиш.

      
    0

    Мы можем использовать CSS Grid для создания ключей, поскольку они расположены в виде сетки. Это уже было сделано за вас в стартовом файле. Вы можете найти стартовый файл на этой ручке.

      .calculator__keys {
      дисплей: сетка;
      / * другой необходимый CSS * /
    }  

    Чтобы помочь нам идентифицировать операторы, десятичные, чистые и равные ключи, мы собираемся предоставить атрибут data-action, который описывает их действие.

      

    Прослушивание нажатия клавиш

    Когда человек достает калькулятор, может произойти пять вещей. Они могут нажать:

    1. цифровую клавишу (0–9)
    2. клавишу оператора (+, -, ×, ÷)
    3. десятичную клавишу
    4. клавишу равенства
    5. клавишу очистки

    Первые шаги для создания этого калькулятора необходимо иметь возможность (1) прослушивать все нажатия клавиш и (2) определять тип нажатой клавиши.В этом случае мы можем использовать шаблон делегирования событий для прослушивания, поскольку все ключи являются дочерними по отношению к .calculator__keys .

      const Calculator = document.querySelector («. Calculator»)
    const keys = Calculator.querySelector («. Calculator__keys»)
    
    keys.addEventListener (‘click’, e => {
     if (e.target.matches (‘button’)) {
       // Сделай что-нибудь
     }
    })  

    Затем мы можем использовать атрибут data-action для определения типа нажатой клавиши.

      const key = e.цель
    const action = key.dataset.action  

    Если ключ не имеет атрибута data-action , это должен быть цифровой ключ.

      если (! Действие) {
      console.log ('цифровой ключ!')
    }  

    Если ключ имеет действие с данными , то есть добавить , вычесть , умножить или разделить , мы знаем, что ключ является оператором.

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      консоль.журнал ('ключ оператора!')
    }  

    Если действие данных ключа является десятичным , мы знаем, что пользователь щелкнул десятичный ключ.

    Следуя тому же мыслительному процессу, если ключ data-action равен clear , мы знаем, что пользователь нажал кнопку очистки (та, которая говорит AC). Если ключ data-action равен вычислить , мы знаем, что пользователь нажал на клавишу равенства.

      if (action === 'decimal') {
      console.log ('десятичный ключ!')
    }
    
    if (action === 'clear') {
      консоль.журнал ('ключ очистки!')
    }
    
    if (action === 'вычислить') {
      console.log ('равный ключ!')
    }  

    На этом этапе вы должны получить ответ console.log от каждой клавиши калькулятора.

    Строим счастливый путь

    Давайте посмотрим, что бы сделал средний человек, взяв в руки калькулятор. Это «то, что сделал бы средний человек», называется счастливым путем .

    Давайте называть обычного человека Мэри.

    Когда Мэри берет калькулятор, она может нажать любую из этих клавиш:

    1. цифровая клавиша (0–9)
    2. клавиша оператора (+, -, ×, ÷)
    3. десятичная клавиша
    4. равная клавиша
    5. четкая клавиша

    Одновременное рассмотрение пяти типов клавиш может показаться сложным, поэтому давайте рассмотрим это шаг за шагом.

    Когда пользователь нажимает цифровую клавишу

    На этом этапе, если калькулятор показывает 0 (число по умолчанию), целевое число должно заменить ноль.

    Если калькулятор показывает ненулевое число, целевое число должно быть добавлено к отображаемому числу.

    Здесь нам нужно знать две вещи:

    1. Номер нажатой клавиши
    2. Текущий отображаемый номер

    Эти два значения можно получить через свойство textContent нажатой клавиши и .Calculator__display соответственно.

      const display = document.querySelector ('. Calculator__display')
    
    keys.addEventListener ('клик', e => {
      if (e.target.matches ('button')) {
        константный ключ = e.target
        const действие = key.dataset.action
        const keyContent = key.textContent
        const displayNum = display.textContent
        // ...
      }
    })  

    Если калькулятор показывает 0, мы хотим заменить дисплей калькулятора нажатой клавишей. Мы можем сделать это, заменив свойство textContent в отображении.

      если (! Действие) {
      if (displayNum === '0') {
        display.textContent = keyContent
      }
    }  

    Если калькулятор показывает ненулевое число, мы хотим добавить нажатую клавишу к отображаемому числу. Чтобы добавить число, мы объединяем строку.

      если (! Действие) {
      if (displayNum === '0') {
        display.textContent = keyContent
      } еще {
        display.textContent = displayNum + keyContent
      }
    }  

    На этом этапе Мэри может нажать любую из этих клавиш:

    1. Десятичный ключ
    2. Операторский ключ

    Допустим, Мэри нажимает десятичный ключ.

    Когда пользователь нажимает десятичную клавишу

    Когда Мэри нажимает десятичную клавишу, на дисплее должно появиться десятичное число. Если Мэри наберет любое число после нажатия десятичной клавиши, это число также должно появиться на дисплее.

    Чтобы создать этот эффект, мы можем объединить . на отображаемый номер.

      if (action === 'decimal') {
      display.textContent = displayNum + '.'
    }  

    Далее, допустим, Мэри продолжает свои вычисления, нажимая клавишу оператора.

    Когда пользователь нажимает клавишу оператора

    Если Мэри нажимает клавишу оператора, оператор должен быть выделен, чтобы Мэри знала, что оператор активен.

    Для этого мы можем добавить к клавише оператора класс нажатый .

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      key.classList.add ('не работает')
    }  

    Как только Мэри нажмет клавишу оператора, она нажмет другую цифровую клавишу.

    Когда пользователь нажимает цифровую клавишу после клавиши оператора

    Когда Мэри снова нажимает цифровую клавишу, предыдущий дисплей должен быть заменен новым номером. Клавиша оператора также должна выйти из своего нажатого состояния.

    Чтобы освободить нажатое состояние, мы удаляем класс нажато из всех клавиш через цикл forEach :

      keys.addEventListener ('click', e => {
      if (e.target.matches ('button')) {
        константный ключ = e.target
        //...
        
        // Удаляем класс .is-depressed со всех клавиш
        Array.from (key.parentNode.children)
          .forEach (k => k.classList.remove ('находится в депрессии'))
      }
    })  

    Затем мы хотим обновить отображение нажатой клавиши. Прежде чем мы это сделаем, нам нужен способ узнать, является ли предыдущий ключ клавишей оператора.

    Один из способов сделать это — использовать настраиваемый атрибут. Назовем этот настраиваемый атрибут data-previous-key-type .

      Калькулятор констант = документ.querySelector ('. калькулятор')
    // ...
    
    keys.addEventListener ('клик', e => {
      if (e.target.matches ('button')) {
        // ...
        
        если (
          действие === 'добавить' ||
          действие === 'вычитание' ||
          действие === 'умножить' ||
          действие === 'разделить'
        ) {
          key.classList.add ('не работает')
          // Добавить настраиваемый атрибут
          Calculator.dataset.previousKeyType = 'оператор'
        }
      }
    })  

    Если previousKeyType является оператором, мы хотим заменить отображаемое число на число, по которому щелкнули мышью.

      const previousKeyType = Calculator.dataset.previousKeyType
    
    if (! action) {
      if (displayNum === '0' || previousKeyType === 'operator') {
        display.textContent = keyContent
      } еще {
        display.textContent = displayNum + keyContent
      }
    }  

    Далее, допустим, Мэри решает завершить вычисление нажатием клавиши равенства.

    Когда пользователь нажимает клавишу равенства

    Когда Мэри нажимает клавишу равенства, калькулятор должен вычислить результат, который зависит от трех значений:

    1. Первое число , , введенное в калькулятор
    2. Оператор
    3. Второе число введенное в калькулятор

    После вычисления результат должен заменить отображаемое значение.

    На данный момент мы знаем только второе число , то есть текущее отображаемое число.

      if (action === 'вычислить') {
      const secondValue = displayNum
      // ...
    }  

    Чтобы получить первое число , нам нужно сохранить отображаемое значение калькулятора, прежде чем мы очистим его. Один из способов сохранить это первое число — добавить его в настраиваемый атрибут при нажатии кнопки оператора.

    Чтобы получить оператор , мы также можем использовать ту же технику.

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      // ...
      Calculator.dataset.firstValue = displayNum
      Calculator.dataset.operator = действие
    }  

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

      if (action === 'calculate') {
      const firstValue = Calculator.dataset.firstValue
      Оператор const = калькулятор.dataset.operator
      const secondValue = displayNum
      
      display.textContent = вычислить (firstValue, оператор, secondValue)
    }  

    Это означает, что нам нужно создать функцию вычисления , вычислить . Он должен принимать три параметра: первое число, оператор и второе число.

      const calculate = (n1, operator, n2) => {
      // Выполняем расчет и возвращаем вычисленное значение
    }  

    Если оператор добавить , мы хотим сложить значения вместе.Если оператор вычитает , мы хотим вычесть значения и так далее.

      const calculate = (n1, operator, n2) => {
      пусть результат = ''
      
      if (operator === 'добавить') {
        результат = n1 + n2
      } else if (operator === 'subtract') {
        результат = n1 - n2
      } else if (operator === 'multiply') {
        результат = n1 * n2
      } иначе, если (оператор === 'делить') {
        результат = n1 / n2
      }
      
      вернуть результат
    }  

    Помните, что firstValue и secondValue на этом этапе являются строками.Если вы сложите строки вместе, вы объедините их ( 1 + 1 = 11 ).

    Итак, перед вычислением результата мы хотим преобразовать строки в числа. Мы можем сделать это с помощью двух функций: parseInt и parseFloat .

    • parseInt преобразует строку в целое число .
    • parseFloat преобразует строку в число с плавающей запятой (это означает число с десятичными знаками).

    Для калькулятора нам понадобится поплавок.

      const calculate = (n1, operator, n2) => {
      пусть результат = ''
      
      if (operator === 'добавить') {
        результат = parseFloat (n1) + parseFloat (n2)
      } else if (operator === 'subtract') {
        результат = parseFloat (n1) - parseFloat (n2)
      } else if (operator === 'multiply') {
        результат = parseFloat (n1) * parseFloat (n2)
      } иначе, если (оператор === 'делить') {
        результат = parseFloat (n1) / parseFloat (n2)
      }
      
      вернуть результат
    }  

    На этом счастливого пути!

    Вы можете получить исходный код счастливого пути по этой ссылке (прокрутите вниз и введите свой адрес электронной почты в поле, и я отправлю исходные коды прямо в ваш почтовый ящик).

    Крайние корпуса

    Не хватает удачного пути. Чтобы создать надежный калькулятор, вам нужно сделать его устойчивым к странным шаблонам ввода. Для этого вы должны представить себе нарушителя спокойствия, который пытается сломать ваш калькулятор, нажимая клавиши в неправильном порядке. Назовем этого возмутителя спокойствия Тимом.

    Тим может нажимать эти клавиши в любом порядке:

    1. Цифровая клавиша (0–9)
    2. Клавиша оператора (+, -, ×, ÷)
    3. Десятичная клавиша
    4. Клавиша равенства
    5. Очистить key

    Что произойдет, если Тим нажмет десятичную клавишу

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

    Здесь мы можем проверить, что отображаемое число содержит . с включает метод .

    включает проверочную строку для данного совпадения. Если строка найдена, она возвращает true ; в противном случае возвращается false .

    Примечание : включает с учетом регистра.

      // Пример включения работы.
    const string = 'Гамбургеры очень вкусные!'
    const hasExclaimation = строка.includes ('!')
    консоль.log (hasExclaimation) // true  

    Чтобы проверить, есть ли в строке точка, мы делаем следующее:

      // Ничего не делать, если в строке есть точка
    if (! DisplayNum.includes ('.')) {
      display.textContent = displayNum + '.'
    }  

    Затем, если Тим нажимает десятичную клавишу после нажатия клавиши оператора, на дисплее должно отображаться 0. .

    Здесь нам нужно знать, является ли предыдущий ключ оператором. Мы можем это сказать, проверив настраиваемый атрибут data-previous-key-type , который мы установили на предыдущем уроке.

    data-previous-key-type еще не завершен. Чтобы правильно определить, является ли previousKeyType оператором, нам нужно обновить previousKeyType для каждой нажатой клавиши.

      если (! Действие) {
      // ...
      Calculator.dataset.previousKey = 'число'
    }
    
    if (action === 'decimal') {
      // ...
      Calculator.dataset.previousKey = 'десятичный'
    }
    
    if (action === 'clear') {
      // ...
      Calculator.dataset.previousKeyType = 'очистить'
    }
    
    if (action === 'вычислить') {
     //...
      Calculator.dataset.previousKeyType = 'вычислить'
    }  

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

      if (action === 'decimal') {
      if (! DisplayNum.includes ('.')) {
        display.textContent = displayNum + '.'
      } else if (previousKeyType === 'operator') {
        display.textContent = '0'.
      }
      
    Calculator.dataset.previousKeyType = 'десятичный'
    }  

    Что произойдет, если Тим нажмет клавишу оператора

    Если Тим сначала нажмет клавишу оператора, клавиша оператора должна загореться.(Мы уже рассмотрели этот крайний случай, но как? Посмотрим, сможете ли вы определить, что мы сделали).

    Во-вторых, ничего не должно произойти, если Тим нажимает одну и ту же клавишу оператора несколько раз. (Мы уже рассмотрели этот крайний случай).

    Примечание: , если вы хотите улучшить UX, вы можете показать, что оператор постоянно нажимается, с некоторыми изменениями CSS. Мы не делали этого здесь, но посмотрим, сможете ли вы запрограммировать это самостоятельно в качестве дополнительной задачи кодирования.

    В-третьих, если Тим нажимает другую клавишу оператора после нажатия первой клавиши оператора, первая клавиша оператора должна быть отпущена.Затем следует нажать вторую клавишу оператора. (Мы рассмотрели и этот крайний случай — но как?).

    В-четвертых, если Тим нажимает число, оператор, число и другой оператор в этом порядке, на дисплее должно появиться вычисленное значение.

    Это означает, что нам нужно использовать функцию Calculate , когда существуют firstValue , operator и secondValue .

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      const firstValue = калькулятор.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      const secondValue = displayNum
      
    // Примечание: достаточно проверить firstValue и оператор, потому что secondValue всегда существует
      if (firstValue && оператор) {
        display.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
    key.classList.add ('не работает')
      Calculator.dataset.previousKeyType = 'оператор'
      Calculator.dataset.firstValue = displayNum
      Calculator.dataset.operator = действие
    }  

    Хотя мы можем вычислить значение при повторном нажатии клавиши оператора, на этом этапе мы также ввели ошибку — при дополнительном нажатии клавиши оператора вычисляется значение, когда этого не должно быть.

    Чтобы калькулятор не выполнял вычисления при последующих нажатиях клавиши оператора, нам нужно проверить, является ли previousKeyType оператором. Если это так, мы не выполняем расчет.

      если (
      firstValue &&
      оператор &&
      previousKeyType! == 'оператор'
    ) {
      display.textContent = вычислить (firstValue, оператор, secondValue)
    }  

    В-пятых, после того, как клавиша оператора вычисляет число, если Тим нажимает на число, за которым следует другой оператор, оператор должен продолжить вычисление, например: 8 - 1 = 7 , 7 - 2 = 5 , 5 - 3 = 2 .

    Прямо сейчас наш калькулятор не может производить последовательные вычисления. Второе рассчитанное значение неверно. Вот что мы имеем: 99 - 1 = 98, , 98 - 1 = 0 .

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

    Понимание нашей функции вычисления

    Сначала предположим, что пользователь нажимает на число 99. На данный момент в калькуляторе еще ничего не зарегистрировано.

    Во-вторых, допустим, пользователь нажимает оператор вычитания. После того, как они щелкают по оператору вычитания, мы устанавливаем firstValue равным 99. Мы также устанавливаем оператор для вычитания.

    В-третьих, допустим, пользователь нажимает второе значение - на этот раз это 1. На этом этапе отображаемое число обновляется до 1, но наши firstValue , operator и secondValue остаются неизменными.

    В-четвертых, пользователь снова нажимает кнопку вычитания. Сразу после нажатия кнопки «Вычесть», прежде чем вычислить результат, мы устанавливаем значение secondValue в качестве отображаемого числа.

    В-пятых, мы выполняем расчет с firstValue 99, operator subtract и secondValue 1. Результат - 98.

    После вычисления результата мы устанавливаем отображение на результат. Затем мы устанавливаем operator на вычитание и firstValue на предыдущее отображаемое число.

    Что ж, это ужасно неправильно! Если мы хотим продолжить вычисление, нам нужно обновить firstValue вычисленным значением.

      const firstValue = Calculator.dataset.firstValue
    Оператор const = Calculator.dataset.operator
    const secondValue = displayNum
    
    если (
      firstValue &&
      оператор &&
      previousKeyType! == 'оператор'
    ) {
      const calcValue = вычислить (firstValue, оператор, secondValue)
      display.textContent = calcValue
      
    // Обновить вычисленное значение как firstValue
      Calculator.dataset.firstValue = calcValue
    } еще {
      // Если вычислений нет, установите displayNum в качестве firstValue
      калькулятор.dataset.firstValue = displayNum
    }
    
    key.classList.add ('не работает')
    Calculator.dataset.previousKeyType = 'оператор'
    Calculator.dataset.operator = action  

    С этим исправлением последовательные вычисления, выполняемые клавишами оператора, теперь должны быть правильными.

    Что произойдет, если Тим нажмет клавишу равенства?

    Во-первых, ничего не должно произойти, если Тим нажмет клавишу равенства перед любой клавишей оператора.

    Мы знаем, что клавиши оператора еще не нажимались, если firstValue не задано как число.Мы можем использовать это знание, чтобы предотвратить вычисление равных.

      if (action === 'вычислить') {
      const firstValue = Calculator.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      const secondValue = displayNum
      
    if (firstValue) {
        display.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
    Calculator.dataset.previousKeyType = 'вычислить'
    }  

    Во-вторых, если Тим набирает число, за которым следует оператор, за которым следует равенство, калькулятор должен вычислить результат так, чтобы:

    1. 2 + = -> 2 + 2 = 4
    2. 2 - = -> 2 - 2 = 0
    3. 2 × = -> 2 × 2 = 4
    4. 2 ÷ = -> 2 ÷ 2 = 1

    ср. уже приняли во внимание этот странный ввод.Вы понимаете почему? 🙂

    В-третьих, если Тим нажимает клавишу равенства после завершения вычисления, другое вычисление должно быть выполнено снова. Вот как должно выглядеть вычисление:

    1. Тим нажимает клавиши 5–1
    2. Тим нажимает равное количество раз. Расчетное значение: 5 - 1 = 4
    3. Тим совпадений. Расчетное значение: 4 - 1 = 3
    4. Тим совпадений. Расчетное значение: 3 - 1 = 2
    5. Tim совпадений. Расчетное значение: 2 - 1 = 1
    6. Tim совпадений.Расчетное значение: 1 - 1 = 0

    К сожалению, наш калькулятор не дает точных расчетов. Вот что показывает наш калькулятор:

    1. Тим нажимает клавиши 5–1
    2. Тим нажимает равное количество раз. Расчетное значение: 4
    3. Тим совпадений. Расчетное значение: 1

    Исправление расчета

    Во-первых, допустим, наш пользователь нажимает 5. На данный момент в калькуляторе еще ничего не зарегистрировано.

    Во-вторых, допустим, пользователь нажимает оператор вычитания.После того, как они щелкают по оператору вычитания, мы устанавливаем firstValue равным 5. Мы также устанавливаем оператор для вычитания.

    В-третьих, пользователь нажимает второе значение. Допустим, это 1. На этом этапе отображаемое число обновляется до 1, но наши firstValue , operator и secondValue остаются неизменными.

    В-четвертых, пользователь нажимает клавишу равенства. Сразу после нажатия кнопки равно, но перед вычислением мы устанавливаем secondValue как отображаемое значение Num

    В-пятых, калькулятор вычисляет результат 5 - 1 и дает 4 .Результат обновляется на дисплее. firstValue и оператор переносятся в следующий расчет, поскольку мы не обновляли их.

    В-шестых, когда пользователь снова нажимает «равно», мы устанавливаем secondValue на displayNum перед вычислением.

    Вы можете сказать, что здесь не так.

    Вместо secondValue нам нужно установить firstValue на отображаемое число.

      if (action === 'вычислить') {
      пусть firstValue = калькулятор.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      const secondValue = displayNum
      
    if (firstValue) {
        if (previousKeyType === 'вычислить') {
          firstValue = displayNum
        }
        
    display.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
    Calculator.dataset.previousKeyType = 'вычислить'
    }  

    Мы также хотим перенести предыдущее значение secondValue в новый расчет. Чтобы значение secondValue сохранялось до следующего вычисления, нам нужно сохранить его в другом настраиваемом атрибуте.Назовем этот настраиваемый атрибут modValue (обозначает значение модификатора).

      if (action === 'вычислить') {
      пусть firstValue = Calculator.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      const secondValue = displayNum
      
    if (firstValue) {
        if (previousKeyType === 'вычислить') {
          firstValue = displayNum
        }
        
    display.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
    // Установить атрибут modValue
      Calculator.dataset.modValue = secondValue
      калькулятор.dataset.previousKeyType = 'вычислить'
    }  

    Если previousKeyType - это вычислить , мы знаем, что можем использовать Calculator.dataset.modValue как secondValue . Как только мы это узнаем, мы сможем выполнить расчет.

      if (firstValue) {
      if (previousKeyType === 'вычислить') {
        firstValue = displayNum
        secondValue = Calculator.dataset.modValue
      }
      
    display.textContent = вычислить (firstValue, оператор, secondValue)
    }  

    Таким образом, у нас есть правильный расчет при последовательном нажатии клавиши равенства.

    Вернуться к клавише равенства

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

    Здесь вместо того, чтобы просто проверять, является ли previousKeyType , оператором , нам также нужно проверить, соответствует ли это вычислить .

      если (! Действие) {
      если (
        DisplayNum === '0' ||
        previousKeyType === 'оператор' ||
        previousKeyType === 'вычислить'
      ) {
        отображать.textContent = keyContent
      } еще {
        display.textContent = displayNum + keyContent
      }
      Calculator.dataset.previousKeyType = 'число'
    }
    
    if (action === 'decimal') {
      if (! DisplayNum.includes ('.')) {
        display.textContent = displayNum + '.'
      } иначе, если (
        previousKeyType === 'оператор' ||
        previousKeyType === 'вычислить'
      ) {
        display.textContent = '0'.
      }
      
    Calculator.dataset.previousKeyType = 'десятичный'
    }  

    В-пятых, если Тим нажимает клавишу оператора сразу после клавиши равенства, калькулятор должен вычислить , а не .

    Для этого мы проверяем, соответствует ли previousKeyType вычислить перед выполнением вычислений с клавишами оператора.

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      // ...
      
    если (
        firstValue &&
        оператор &&
        previousKeyType! == 'оператор' &&
        previousKeyType! == 'вычислить'
      ) {
        const calcValue = вычислить (firstValue, оператор, secondValue)
        отображать.textContent = calcValue
        Calculator.dataset.firstValue = calcValue
      } еще {
        Calculator.dataset.firstValue = displayNum
      }
      
    // ...
    }  

    Клавиша очистки имеет два использования:

    1. All Clear (обозначается AC ) очищает все и сбрасывает калькулятор в исходное состояние.
    2. Очистить запись (обозначается CE ) очищает текущую запись. Он сохраняет в памяти предыдущие числа.

    Когда калькулятор находится в состоянии по умолчанию, должен отображаться AC .

    Во-первых, если Тим нажимает клавишу (любую клавишу, кроме чистой), AC следует изменить на CE .

    Мы делаем это, проверяя, является ли действие data-action clear . Если это не , очистить , мы ищем кнопку очистки и меняем ее textContent .

      if (action! == 'clear') {
      const clearButton = Calculator.querySelector ('[data-action = clear]')
      clearButton.textContent = 'CE'
    }  

    Во-вторых, если Тим достигает CE , на дисплее должно отображаться 0.В то же время CE следует вернуть к AC , чтобы Тим мог сбросить калькулятор в исходное состояние. **

      if (action === 'clear') {
      display.textContent = 0
      key.textContent = 'AC'
      Calculator.dataset.previousKeyType = 'очистить'
    }  

    В-третьих, если Тим достигает AC , сбросьте калькулятор в исходное состояние.

    Чтобы вернуть калькулятор в исходное состояние, нам нужно очистить все установленные нами настраиваемые атрибуты.

      if (action === 'clear') {
      если (ключ.textContent === 'AC') {
        Calculator.dataset.firstValue = ''
        Calculator.dataset.modValue = ''
        Calculator.dataset.operator = ''
        Calculator.dataset.previousKeyType = ''
      } еще {
        key.textContent = 'AC'
      }
      
    display.textContent = 0
      Calculator.dataset.previousKeyType = 'очистить'
    }  

    Вот и все - по крайней мере, для части крайних корпусов!

    Вы можете получить исходный код для части крайних случаев по этой ссылке (прокрутите вниз и введите свой адрес электронной почты в поле, и я отправлю исходные коды прямо в ваш почтовый ящик).

    На этом этапе код, который мы создали вместе, довольно запутан. Вы, вероятно, заблудитесь, если попытаетесь прочитать код самостоятельно. Давайте проведем рефакторинг, чтобы он стал чище.

    Рефакторинг кода

    Рефакторинг часто начинается с наиболее очевидных улучшений. В этом случае давайте начнем с и вычислим .

    Прежде чем продолжить, убедитесь, что вы знаете эти методы / функции JavaScript. Мы будем использовать их в рефакторинге.

    1. Ранний возврат
    2. Тернарные операторы
    3. Чистые функции
    4. ES6 Деструктуризация

    Итак, приступим!

    Рефакторинг функции вычисления

    Вот что у нас есть на данный момент.

      const calculate = (n1, operator, n2) => {
      пусть результат = ''
      if (operator === 'добавить') {
        результат = firstNum + parseFloat (n2)
      } else if (operator === 'subtract') {
        результат = parseFloat (n1) - parseFloat (n2)
      } else if (operator === 'multiply') {
        результат = parseFloat (n1) * parseFloat (n2)
      } иначе, если (оператор === 'делить') {
        результат = parseFloat (n1) / parseFloat (n2)
      }
      
      вернуть результат
    }  

    Вы узнали, что нам следует максимально сократить количество повторных назначений.Здесь мы можем удалить присвоения, если мы вернем результат вычисления в пределах операторов if и else if :

      const calculate = (n1, operator, n2) => {
      if (operator === 'добавить') {
        вернуть firstNum + parseFloat (n2)
      } else if (operator === 'subtract') {
        вернуть parseFloat (n1) - parseFloat (n2)
      } else if (operator === 'multiply') {
        вернуть parseFloat (n1) * parseFloat (n2)
      } иначе, если (оператор === 'делить') {
        вернуть parseFloat (n1) / parseFloat (n2)
      }
    }  

    Поскольку мы возвращаем все значения, мы можем использовать для раннего возврата .Если мы это сделаем, то больше не потребуется, если условия.

      const calculate = (n1, operator, n2) => {
      if (operator === 'добавить') {
        вернуть firstNum + parseFloat (n2)
      }
      
      if (operator === 'subtract') {
        вернуть parseFloat (n1) - parseFloat (n2)
      }
      
      if (operator === 'умножить') {
        вернуть parseFloat (n1) * parseFloat (n2)
      }
      
      if (оператор === 'делить') {
        вернуть parseFloat (n1) / parseFloat (n2)
      }
    }  

    И поскольку у нас есть один оператор на , если условие , мы можем снять скобки.(Примечание: некоторые разработчики предпочитают фигурные скобки). Вот как будет выглядеть код:

      const calculate = (n1, operator, n2) => {
      if (operator === 'add') вернуть parseFloat (n1) + parseFloat (n2)
      if (operator === 'subtract') вернуть parseFloat (n1) - parseFloat (n2)
      если (оператор === 'умножить') вернуть parseFloat (n1) * parseFloat (n2)
      если (оператор === 'делить') вернуть parseFloat (n1) / parseFloat (n2)
    }  

    Наконец, мы восемь раз вызывали parseFloat в функции.Мы можем упростить его, создав две переменные, содержащие значения с плавающей запятой:

      const calculate = (n1, operator, n2) => {
      const firstNum = parseFloat (n1)
      const secondNum = parseFloat (n2)
      если (оператор === 'добавить') вернуть firstNum + secondNum
      if (operator === 'subtract') вернуть firstNum - secondNum
      если (оператор === 'умножить') вернуть firstNum * secondNum
      если (оператор === 'делить') вернуть firstNum / secondNum
    }  

    Мы закончили с , вычислим . Вам не кажется, что это легче читать по сравнению с тем, что было раньше?

    Реорганизация прослушивателя событий

    Код, который мы создали для прослушивателя событий, огромен.Вот что у нас есть на данный момент:

      keys.addEventListener ('click', e => {
      if (e.target.matches ('button')) {
      
        если (! действие) {/ * ... * /}
        
        если (действие === 'добавить' ||
          действие === 'вычитание' ||
          действие === 'умножить' ||
          action === 'разделять') {
          / * ... * /
        }
        
        if (action === 'clear') {/ * ... * /}
        if (действие! == 'очистить') {/ * ... * /}
        if (action === 'вычислить') {/ * ... * /}
      }
    })  

    Как начать рефакторинг этого фрагмента кода? Если вы не знакомы с передовыми методами программирования, у вас может возникнуть соблазн провести рефакторинг, разделив каждый вид действий на более мелкие функции:

      // Не делайте этого!
    const handleNumberKeys = (/ *... * /) => {/ * ... * /}
    const handleOperatorKeys = (/ * ... * /) => {/ * ... * /}
    const handleDecimalKey = (/ * ... * /) => {/ * ... * /}
    const handleClearKey = (/ * ... * /) => {/ * ... * /}
    const handleCalculateKey = (/ * ... * /) => {/ * ... * /}  

    Не делайте этого. Это не помогает, потому что вы просто разбиваете блоки кода. Когда вы это сделаете, функцию становится труднее читать.

    Лучше всего разделить код на чистые и нечистые функции. Если вы это сделаете, вы получите следующий код:

      ключей.addEventListener ('клик', e => {
      // Чистая функция
      const resultString = createResultString (/ * ... * /)
      
      // нечистоты
      display.textContent = resultString
      updateCalculatorState (/ * ... * /)
    })  

    Здесь createResultString - это чистая функция, которая возвращает то, что необходимо отобразить на калькуляторе. updateCalculatorState - это нечистая функция, которая изменяет внешний вид калькулятора и настраиваемые атрибуты.

    Создание createResultString

    Как упоминалось ранее, createResultString должен возвращать значение, которое необходимо отобразить на калькуляторе.
    Эти значения можно получить с помощью частей кода, в которых указано display.textContent = 'some value .

      display.textContent = 'some value'  

    Вместо display.textContent = 'some value' мы хотим вернуть каждое значение, чтобы мы могли использовать его позже.

      // замените вышеприведенное на это
    return 'some value'  

    Давайте рассмотрим это вместе, шаг за шагом, начиная с цифровых клавиш.

    Создание строки результата для цифровых клавиш

    Вот код, который у нас есть для цифровых клавиш:

      if (! Action) {
      если (
        DisplayNum === '0' ||
        previousKeyType === 'оператор' ||
        previousKeyType === 'вычислить'
      ) {
        отображать.textContent = keyContent
      } еще {
        display.textContent = displayNum + keyContent
      }
      Calculator.dataset.previousKeyType = 'число'
    }  

    Первый шаг - скопировать части, которые говорят display.textContent = 'some value' , в createResultString . Когда вы это сделаете, убедитесь, что вы изменили display.textContent = на return .

      const createResultString = () => {
      if (! action) {
        если (
          DisplayNum === '0' ||
          previousKeyType === 'оператор' ||
          previousKeyType === 'вычислить'
        ) {
          вернуть keyContent
        } еще {
          return отображаетсяNum + keyContent
        }
      }
    }  

    Затем мы можем преобразовать оператор if / else в тернарный оператор:

      const createResultString = () => {
      if (действие!) {
        return DisplayNum === '0' ||
          previousKeyType === 'оператор' ||
          previousKeyType === 'вычислить'
          ? keyContent
          : displayNum + keyContent
      }
    }  

    При рефакторинге не забудьте записать список необходимых вам переменных.Мы вернемся к списку позже.

      const createResultString = () => {
      // Необходимые переменные:
      // 1. keyContent
      // 2. displayNum
      // 3. previousKeyType
      // 4. действие
      
      if (действие!) {
        return DisplayNum === '0' ||
          previousKeyType === 'оператор' ||
          previousKeyType === 'вычислить'
          ? keyContent
          : displayNum + keyContent
      }
    }  

    Создание строки результата для десятичного ключа

    Вот код, который у нас есть для десятичного ключа:

      if (action === 'decimal') {
      если (! отображаетсяНум.включает в себя('.')) {
        display.textContent = displayNum + '.'
      } иначе, если (
        previousKeyType === 'оператор' ||
        previousKeyType === 'вычислить'
      ) {
        display.textContent = '0'.
      }
      
      Calculator.dataset.previousKeyType = 'десятичный'
    }  

    Как и раньше, мы хотим переместить все, что изменяет display.textContent на createResultString .

      const createResultString = () => {
      // ...
      
      if (action === 'decimal') {
        если (! отображаетсяНум.включает в себя('.')) {
          return = displayNum + '.'
        } else if (previousKeyType === 'operator' || previousKeyType === 'вычислить') {
          return = '0'.
        }
      }
    }  

    Поскольку мы хотим вернуть все значения, мы можем преобразовать операторы else if в ранний возврат.

      const createResultString = () => {
      // ...
      
      if (action === 'decimal') {
        if (! DisplayNum.includes ('.')) верните DisplayNum + '.'
        if (previousKeyType === 'operator' || previousKeyType === 'calculate') return '0.'
      }
    }  

    Распространенной ошибкой здесь является то, что забывают вернуть текущий отображаемый номер, если ни одно из условий не выполнено. Нам это нужно, потому что мы заменим display.textContent значением, возвращаемым из createResultString . Если мы его пропустили, createResultString вернет undefined , чего мы не хотим.

      const createResultString = () => {
      // ...
      
      if (action === 'decimal') {
        если (! отображаетсяНум.включает ('.')) return displayNum + '.'
        if (previousKeyType === 'operator' || previousKeyType === 'calculate') вернет '0.'
        возврат отображаетсяNum
      }
    }  

    Как всегда, обратите внимание на необходимые переменные. На этом этапе требуемые переменные остаются такими же, как и раньше:

      const createResultString = () => {
      // Необходимые переменные:
      // 1. keyContent
      // 2. displayNum
      // 3. previousKeyType
      // 4. действие
    }  

    Создание строки результата для клавиш оператора

    Вот код, который мы написали для клавиш оператора.

      если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {
      const firstValue = Calculator.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      const secondValue = displayNum
      
      если (
        firstValue &&
        оператор &&
        previousKeyType! == 'оператор' &&
        previousKeyType! == 'вычислить'
      ) {
        const calcValue = вычислить (firstValue, оператор, secondValue)
        display.textContent = calcValue
        калькулятор.dataset.firstValue = calcValue
      } еще {
        Calculator.dataset.firstValue = displayNum
      }
      
      key.classList.add ('не работает')
      Calculator.dataset.previousKeyType = 'оператор'
      Calculator.dataset.operator = действие
    }  

    Вы уже знакомы с подробностями: мы хотим переместить все, что изменяет display.textContent в createResultString . Вот что нужно переместить:

      const createResultString = () => {
      // ...
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) {
        const firstValue = калькулятор.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        const secondValue = displayNum
        
        если (
          firstValue &&
          оператор &&
          previousKeyType! == 'оператор' &&
          previousKeyType! == 'вычислить'
        ) {
          вернуть вычислить (firstValue, оператор, secondValue)
        }
      }
    }  

    Помните, createResultString необходимо вернуть значение, которое будет отображаться на калькуляторе. Если условие if не соответствует, мы все равно хотим вернуть отображаемое число.

      const createResultString = () => {
      // ...
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) {
        const firstValue = Calculator.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        const secondValue = displayNum
        
        если (
          firstValue &&
          оператор &&
          previousKeyType! == 'оператор' &&
          previousKeyType! == 'вычислить'
        ) {
          вернуть вычислить (firstValue, оператор, secondValue)
        } еще {
          возврат отображаетсяNum
        }
      }
    }  

    Затем мы можем преобразовать оператор if / else в тернарный оператор:

      const createResultString = () => {
      //...
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) {
        const firstValue = Calculator.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        const secondValue = displayNum
        
        вернуть firstValue &&
          оператор &&
          previousKeyType! == 'оператор' &&
          previousKeyType! == 'вычислить'
          ? вычислить (первое значение, оператор, второе значение)
          : DisplayNum
      }
    }  

    Если вы присмотритесь, то поймете, что нет необходимости хранить переменную secondValue .Мы можем использовать displayNum непосредственно в функции calculate .

      const createResultString = () => {
      // ...
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) {
        const firstValue = Calculator.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        
        вернуть firstValue &&
          оператор &&
          previousKeyType! == 'оператор' &&
          previousKeyType! == 'вычислить'
          ? вычислить (firstValue, оператор, displayNum)
          : DisplayNum
      }
    }  

    Наконец, обратите внимание на необходимые переменные и свойства.На этот раз нам понадобятся Calculator.dataset.firstValue и Calculator.dataset.operator .

      const createResultString = () => {
      // Необходимые переменные и свойства:
      // 1. keyContent
      // 2. displayNum
      // 3. previousKeyType
      // 4. действие
      // 5. Calculator.dataset.firstValue
      // 6. Calculator.dataset.operator
    }  

    Создание строки результата для ключа очистки

    Мы написали следующий код для обработки ключа очистки .

      if (action === 'clear') {
      if (key.textContent === 'AC') {
        Calculator.dataset.firstValue = ''
        Calculator.dataset.modValue = ''
        Calculator.dataset.operator = ''
        Calculator.dataset.previousKeyType = ''
      } еще {
        key.textContent = 'AC'
      }
      
      display.textContent = 0
      Calculator.dataset.previousKeyType = 'очистить'
    }  

    Как и выше, вы хотите переместить все, что изменяет display.textContent в createResultString .

      const createResultString = () => {
      //...
      если (действие === 'очистить') вернуть 0
    }  

    Создание строки результата для ключа равенства

    Вот код, который мы написали для ключа равенства:

      if (action === 'calculate') {
      пусть firstValue = Calculator.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      пусть secondValue = отображаетсяNum
      
      if (firstValue) {
        if (previousKeyType === 'вычислить') {
          firstValue = displayNum
          secondValue = Calculator.dataset.modValue
        }
        
        отображать.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
      Calculator.dataset.modValue = secondValue
      Calculator.dataset.previousKeyType = 'вычислить'
    }  

    Как и выше, мы хотим скопировать все, что изменяет display.textContent , в createResultString . Вот что нужно скопировать:

      if (action === 'calculate') {
      пусть firstValue = Calculator.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      пусть secondValue = отображаетсяNum
      
      if (firstValue) {
        if (previousKeyType === 'вычислить') {
          firstValue = displayNum
          secondValue = калькулятор.dataset.modValue
        }
        display.textContent = вычислить (firstValue, оператор, secondValue)
      }
    }  

    При копировании кода в createResultString убедитесь, что вы возвращаете значения для всех возможных сценариев:

      const createResultString = () => {
      // ...
      
      if (action === 'вычислить') {
        пусть firstValue = Calculator.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        пусть secondValue = отображаетсяNum
        
        if (firstValue) {
          if (previousKeyType === 'вычислить') {
            firstValue = displayNum
            secondValue = калькулятор.dataset.modValue
          }
          вернуть вычислить (firstValue, оператор, secondValue)
        } еще {
          возврат отображаетсяNum
        }
      }
    }  

    Далее мы хотим уменьшить количество повторных назначений. Мы можем сделать это, передав правильные значения в calculate через тернарный оператор.

      const createResultString = () => {
      // ...
      
      if (action === 'вычислить') {
        const firstValue = Calculator.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        const modValue = калькулятор.dataset.modValue
        
        if (firstValue) {
          вернуть предыдущийKeyType === 'вычислить'
            ? вычислить (отображается число, оператор, modValue)
            : вычислить (firstValue, оператор, displayNum)
        } еще {
          возврат отображаетсяNum
        }
      }
    }  

    Вы можете еще больше упростить приведенный выше код с помощью другого тернарного оператора, если вам это удобно:

      const createResultString = () => {
      // ...
      
      if (action === 'вычислить') {
        const firstValue = калькулятор.dataset.firstValue
        Оператор const = Calculator.dataset.operator
        const modValue = Calculator.dataset.modValue
        
        вернуть firstValue
          ? previousKeyType === 'вычислить'
            ? вычислить (отображается число, оператор, modValue)
            : вычислить (firstValue, оператор, displayNum)
          : DisplayNum
      }
    }  

    На этом этапе мы хотим снова обратить внимание на требуемые свойства и переменные:

      const createResultString = () => {
      // Необходимые переменные и свойства:
      // 1.keyContent
      // 2. displayNum
      // 3. previousKeyType
      // 4. действие
      // 5. Calculator.dataset.firstValue
      // 6. Calculator.dataset.operator
      // 7. Calculator.dataset.modValue
    }  

    Передача необходимых переменных

    Нам нужны семь свойств / переменных в createResultString :

    1. keyContent
    2. displayNum
    3. previousKeyType
    4. action
    5. firstValue modValue
    6. operator

    Мы можем получить keyContent и action из key .Мы также можем получить firstValue , modValue , operator и previousKeyType из набора данных калькулятора .

    Это означает, что функции createResultString требуются три переменные: ключ , displayNum и Calculator.dataset . Поскольку Calculator.dataset представляет состояние калькулятора, давайте вместо этого будем использовать переменную с именем state .

      const createResultString = (ключ, отображаемое число, состояние) => {
      const keyContent = ключ.textContent
      const действие = key.dataset.action
      const firstValue = state.firstValue
      const modValue = state.modValue
      const оператор = состояние. оператор
      const previousKeyType = state.previousKeyType
      // ... Рефакторинг по мере необходимости
    }
    
    // Использование createResultString
    keys.addEventListener ('клик', e => {
      если (e.target.matches ('button')) return
      const displayNum = display.textContent
      const resultString = createResultString (e.target, displayNum, Calculator.dataset)
      
      // ...
    })  

    Не стесняйтесь деструктурировать переменные, если хотите:

      const createResultString = (key, displayNum, state) => {
      const keyContent = ключ.textContent
      const {действие} = key.dataset
      const {
        firstValue,
        modValue,
        оператор
        previousKeyType
      } = состояние
      
      // ...
    }  

    Согласованность внутри операторов if

    В createResultString мы использовали следующие условия для проверки типа нажатых клавиш:

      // Если ключ - это число
    если (! действие) {/ * ... * /}
    
    // Если ключ десятичный
    if (действие === 'десятичное') {/ * ... * /}
    
    // Если ключ - оператор
    если (
      действие === 'добавить' ||
      действие === 'вычитание' ||
      действие === 'умножить' ||
      действие === 'разделить'
    ) {/ *... * /}
    
    // Если ключ очищен
    if (action === 'clear') {/ * ... * /}
    
    // Если ключ вычислен
    if (action === 'calculate') {/ * ... * /}  

    Они непоследовательны, поэтому их трудно читать. Если возможно, мы хотим сделать их согласованными, чтобы написать что-то вроде этого:

      if (keyType === 'number') {/ * ... * /}
    if (keyType === 'десятичный') {/ * ... * /}
    if (keyType === 'оператор') {/ * ... * /}
    if (keyType === 'clear') {/ * ... * /}
    if (keyType === 'calculate') {/ * ... * /}  

    Для этого мы можем создать функцию с именем getKeyType .Эта функция должна возвращать тип нажатой клавиши.

      const getKeyType = (ключ) => {
      const {действие} = key.dataset
      если (! действие) вернет "число"
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) return 'оператор'
      // Для всего остального вернуть действие
      обратное действие
    }  

    Вот как вы будете использовать эту функцию:

      const createResultString = (key, displayNum, state) => {
      const keyType = getKeyType (ключ)
      
      if (keyType === 'число') {/ *... * /}
      if (keyType === 'десятичный') {/ * ... * /}
      if (keyType === 'оператор') {/ * ... * /}
      if (keyType === 'clear') {/ * ... * /}
      if (keyType === 'вычислить') {/ * ... * /}
    }  

    Мы закончили с createResultString . Перейдем к updateCalculatorState .

    Создание updateCalculatorState

    updateCalculatorState - это функция, которая изменяет внешний вид калькулятора и настраиваемые атрибуты.

    Как и в случае с createResultString , нам нужно проверить тип нажатой клавиши.Здесь мы можем повторно использовать getKeyType .

      const updateCalculatorState = (ключ) => {
      const keyType = getKeyType (ключ)
      
      if (keyType === 'число') {/ * ... * /}
      if (keyType === 'десятичный') {/ * ... * /}
      if (keyType === 'оператор') {/ * ... * /}
      if (keyType === 'clear') {/ * ... * /}
      if (keyType === 'вычислить') {/ * ... * /}
    }  

    Если вы посмотрите на оставшийся код, вы можете заметить, что мы изменили data-previous-key-type для каждого типа ключа.Вот как выглядит код:

      const updateCalculatorState = (ключ, калькулятор) => {
      const keyType = getKeyType (ключ)
      
      if (! action) {
        // ...
        Calculator.dataset.previousKeyType = 'число'
      }
      
      if (action === 'decimal') {
        // ...
        Calculator.dataset.previousKeyType = 'десятичный'
      }
      
      если (
        действие === 'добавить' ||
        действие === 'вычитание' ||
        действие === 'умножить' ||
        действие === 'разделить'
      ) {
        // ...
        Calculator.dataset.previousKeyType = 'оператор'
      }
      
      if (action === 'clear') {
        //...
        Calculator.dataset.previousKeyType = 'очистить'
      }
      
      if (action === 'вычислить') {
        Calculator.dataset.previousKeyType = 'вычислить'
      }
    }  

    Это избыточно, потому что мы уже знаем тип ключа с помощью getKeyType . Мы можем выполнить рефакторинг приведенного выше кода:

      const updateCalculatorState = (key, Calculator) => {
      const keyType = getKeyType (ключ)
      Calculator.dataset.previousKeyType = keyType
        
      if (keyType === 'число') {/ * ... * /}
      if (keyType === 'decimal') {/ *... * /}
      if (keyType === 'оператор') {/ * ... * /}
      if (keyType === 'clear') {/ * ... * /}
      if (keyType === 'вычислить') {/ * ... * /}
    }  

    Создание

    updateCalculatorState для клавиш оператора

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

      const updateCalculatorState = (ключ, калькулятор) => {
      const keyType = getKeyType (ключ)
      Calculator.dataset.previousKeyType = keyType
      
      Множество.from (key.parentNode.children) .forEach (k => k.classList.remove ('находится в депрессии'))
    }  

    Вот что осталось от того, что мы написали для клавиш оператора, после перемещения частей, связанных с display.textContent , в createResultString .

      if (keyType === 'operator') {
      если (firstValue &&
          оператор &&
          previousKeyType! == 'оператор' &&
          previousKeyType! == 'вычислить'
      ) {
        Calculator.dataset.firstValue = CalculatorValue
      } еще {
        калькулятор.dataset.firstValue = displayNum
      }
      
      key.classList.add ('не работает')
      Calculator.dataset.operator = key.dataset.action
    }  

    Вы можете заметить, что мы можем сократить код с помощью тернарного оператора:

      if (keyType === 'operator') {
      key.classList.add ('не работает')
      Calculator.dataset.operator = key.dataset.action
      Calculator.dataset.firstValue = firstValue &&
        оператор &&
        previousKeyType! == 'оператор' &&
        previousKeyType! == 'вычислить'
        ? CalculatedValue
        : DisplayNum
    }  

    Как и раньше, обратите внимание на необходимые вам переменные и свойства.Здесь нам нужно CalculatedValue и DisplayNum .

      const updateCalculatorState = (ключ, калькулятор) => {
      // Необходимые переменные и свойства
      // 1. ключ
      // 2. калькулятор
      // 3. CalculatedValue
      // 4. displayNum
    }  

    Создание

    updateCalculatorState для ключа очистки

    Вот оставшийся код для ключа очистки:

      if (action === 'clear') {
      if (key.textContent === 'AC') {
        калькулятор.dataset.firstValue = ''
        Calculator.dataset.modValue = ''
        Calculator.dataset.operator = ''
        Calculator.dataset.previousKeyType = ''
      } еще {
        key.textContent = 'AC'
      }
    }
    
    if (action! == 'clear') {
      const clearButton = Calculator.querySelector ('[data-action = clear]')
      clearButton.textContent = 'CE'
    }  

    Здесь нет ничего, что можно было бы реорганизовать. Не стесняйтесь копировать / вставлять все в updateCalculatorState .

    Создание

    updateCalculatorState для ключа равенства

    Вот код, который мы написали для ключа равенства:

      if (action === 'calculate') {
      пусть firstValue = калькулятор.dataset.firstValue
      Оператор const = Calculator.dataset.operator
      пусть secondValue = отображаетсяNum
      
      if (firstValue) {
        if (previousKeyType === 'вычислить') {
          firstValue = displayNum
          secondValue = Calculator.dataset.modValue
        }
        
        display.textContent = вычислить (firstValue, оператор, secondValue)
      }
      
      Calculator.dataset.modValue = secondValue
      Calculator.dataset.previousKeyType = 'вычислить'
    }  

    Вот что у нас останется, если мы удалим все, что касается дисплея .textContent .

      if (action === 'вычислить') {
      пусть secondValue = отображаетсяNum
      
      if (firstValue) {
        if (previousKeyType === 'вычислить') {
          secondValue = Calculator.dataset.modValue
        }
      }
      
      Calculator.dataset.modValue = secondValue
    }  

    Мы можем преобразовать это в следующее:

      if (keyType === 'calculate') {
      Calculator.dataset.modValue = firstValue && previousKeyType === 'вычислить'
        ? modValue
        : DisplayNum
    }  

    Как всегда, обратите внимание на используемые свойства и переменные:

      const updateCalculatorState = (key, Calculator) => {
      // Необходимые переменные и свойства
      // 1.ключ
      // 2. калькулятор
      // 3. CalculatedValue
      // 4. displayNum
      // 5. modValue
    }  

    Передача необходимых переменных

    Мы знаем, что нам нужны пять переменных / свойств для updateCalculatorState :

    1. ключ
    2. Calculator
    3. CalculatorValue
    4. displayNum
    5. mod18alue

    Начиная с modValue можно получить из калькулятора .набор данных , нам нужно передать только четыре значения:

      const updateCalculatorState = (ключ, калькулятор, вычисленное значение, отображаемое число) => {
      // ...
    }
    
    keys.addEventListener ('клик', e => {
      если (e.target.matches ('button')) return
      
      константный ключ = e.target
      const displayNum = display.textContent
      const resultString = createResultString (ключ, отображаемое число, набор данных калькулятора)
      
      display.textContent = resultString
      
      // Передаем необходимые значения
      updateCalculatorState (ключ, калькулятор, resultString, displayNum)
    })  

    Снова рефакторинг updateCalculatorState

    Мы изменили три вида значений в калькуляторе updateCalculatorState :

    1. .набор данных
    2. Класс для нажатия / нажатия операторов
    3. AC vs CE text

    Если вы хотите сделать его более чистым, вы можете разделить (2) и (3) на другую функцию - updateVisualState . Вот как может выглядеть updateVisualState :

      const updateVisualState = (ключ, калькулятор) => {
      const keyType = getKeyType (ключ)
      Array.from (key.parentNode.children) .forEach (k => k.classList.remove ('находится в депрессии'))
      
      if (keyType === 'operator') ключ.classList.add ('в депрессии')
      
      if (keyType === 'clear' && key.textContent! == 'AC') {
        key.textContent = 'AC'
      }
      
      if (keyType! == 'clear') {
        const clearButton = Calculator.querySelector ('[data-action = clear]')
        clearButton.textContent = 'CE'
      }
    }  

    Завершение

    После рефакторинга код стал намного чище. Если вы посмотрите в прослушиватель событий, вы узнаете, что делает каждая функция. Вот как выглядит прослушиватель событий в конце:

      ключей.addEventListener ('клик', e => {
      если (e.target.matches ('button')) return
      константный ключ = e.target
      const displayNum = display.textContent
      
      // Чистые функции
      const resultString = createResultString (ключ, отображаемое число, набор данных калькулятора)
      
      // Обновить состояния
      display.textContent = resultString
      updateCalculatorState (ключ, калькулятор, resultString, displayNum)
      updateVisualState (ключ, калькулятор)
    })  

    Вы можете получить исходный код для части рефакторинга по этой ссылке (прокрутите вниз и введите свой адрес электронной почты в поле, и я отправлю исходные коды прямо в ваш почтовый ящик).

    Надеюсь, вам понравилась эта статья. Если да, возможно, вам понравится Learn JavaScript - курс, в котором я покажу вам, как построить 20 компонентов, шаг за шагом, подобно тому, как мы создали этот калькулятор сегодня.

    Примечание: мы можем улучшить калькулятор, добавив поддержку клавиатуры и специальные возможности, такие как живые регионы. Хотите узнать как? Пойдите, проверьте Learn JavaScript 🙂

    Планировщик сборок и калькулятор перков Fallout 76 (все перки и мутации)

    Планируйте своего персонажа Fallout 76 с помощью нашего Планировщика сборок Fallout 76 и делитесь своей сборкой с друзьями, в сообществах, на Reddit и т. Д.Чтобы поделиться своей сборкой, просто скопируйте URL-адрес из адресной строки в браузере или воспользуйтесь вкладкой «Экспорт» в самом Планировщике сборки.

    Fallout 76 Сборки и руководства

    Если вы хотите создать полную сборку персонажа для Fallout 76, вы можете опубликовать свою сборку Fo76 в нашем каталоге сборок Fallout 76.

    Fallout 76 Конструктор перков

    Самым важным аспектом при планировании персонажа в Fallout 76 являются карты перков. Вы можете найти все перки Fallout 76 здесь.

    По этой причине большинство сборок будет начинаться с выбора карт перков и распределения S.P.E.C.I.A.L. в конце, чтобы соответствовать выбранным картам перков.

    Чтобы упростить эту задачу, вы можете найти AutoOptimizer ™ во вкладке «Статистика». AutoOptimizer ™ подберет оптимальное количество баллов для каждого S.P.E.C.I.A.L. для тебя. Вы можете отключить его, чтобы получить полный контроль над потраченными баллами, если вы хотите отклониться от оптимального распределения баллов.

    Сами карты перков выбираются во вкладке «Перки».Здесь вы фильтруете их по имени или требуемому уровню, чтобы использовать их. Используйте поиск, чтобы сгруппировать льготы по таким ключевым словам, как «тяжелая пушка».

    Уведомление: Если вы из Германии, вы можете использовать Планировщик сборки на немецком языке на нашем дочернем сайте www.vault76.de.

    Fo76 S.P.E.C.I.A.L. Статистика

    В нашем Планировщике сборок Fallout 76 есть целая вкладка для отображения вашей статистики. Он называется «Stat», и здесь вы можете добавлять баффы, мутации и распространять S.P.E.C.I.A.L. точки.

    Когда вы начинаете играть в Fallout 76, у вас автоматически появляется одно очко атрибута в каждой S.P.E.C.I.A.L. На каждом уровне вы можете потратить еще одно очко на один из семи атрибутов (Сила, Восприятие, Выносливость, Харизма, Интеллект, Ловкость и Удача). Начиная со 2-го по 50-й уровень, вы можете потратить 49 очков. Каждый раз, когда вы получаете балл, вы также можете выбрать новую карту перка.

    Как только вы достигнете 50-го уровня, у вас больше не будет очков атрибутов, которые можно потратить (но вы получите больше карт перков). Максимальное количество баллов за атрибут - 15 - это означает, что вы не можете потратить более 15 баллов на один атрибут.

    Полезно знать: вы не можете сбросить настройки S.P.E.C.I.A.L. баллов - так что действительно важно планировать заранее!

    Вот краткий обзор того, что предоставляют семь атрибутов:

    • Strength: Влияет на то, сколько вы можете нести, и на урон ваших рукопашных атак.
    • Восприятие: Влияет на вашу осведомленность о ближайших врагах, вашу способность обнаруживать незаметное движение и точность вашего оружия в V.A.T.S.
    • Выносливость: Влияет на ваше общее здоровье, потерю очков действия при спринте и вашу сопротивляемость болезням.
    • Харизма: Позволяет вам делиться картами перков с более высоким баллом, а также влияет на ваши награды за групповые миссии и цены при обмене.
    • Интеллект: Влияет на вашу способность взламывать терминалы, состояние и долговечность созданных вами предметов, а также на прибыль, которую вы получаете от утилизации.
    • Ловкость: Влияет на количество очков действия в V.A.T.S. и ваша способность красться.
    • Удача: Влияет на скорость перезарядки критических ударов, а также на состояние и долговечность добываемых вами предметов.

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

    Хотите создать калькулятор WordPress? Вы вполне можете - и с правильными инструментами это легко. Вот как добавить собственный калькулятор на ваш сайт WordPress.

    Приблизительное время чтения: 7,5 минут

    Что приходит на ум, когда вы думаете о калькуляторах? Кошмары налогового сезона? Воспоминания о школьном экзамене по математике? Если вы связываете калькуляторы с изнурительными математическими задачами, вы не одиноки.

    Но у нас есть хорошие новости: калькуляторов не стоит бояться. Фактически, если у вас есть сайт на WordPress, калькуляторы могут стать вашим новым лучшим другом!

    Существует практически бесконечное количество способов заставить онлайн-калькуляторы работать на вашем веб-сайте. Сначала мы дадим вам несколько идей. Затем мы покажем вам, как сделать свой собственный калькулятор всего за несколько простых шагов.

    Зачем вам нужен калькулятор на вашем сайте?

    Допустим, вы занимаетесь недвижимостью.Одна из самых полезных вещей, которые вы можете предложить своим клиентам, - это калькулятор веб-сайта.

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

    И это верно практически для всех отраслей!

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

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

    Калькулятор полезен для вашего веб-сайта, потому что он полезен для посетителей. Ваша работа - служить им. И специальный калькулятор для вашего веб-сайта - отличный способ сделать это.

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

    Итак, почему не использует калькулятор на своем сайте WordPress?

    Подробнее: 6 способов использования калькуляторов на сайтах WordPress

    Это очень распространенный сценарий. При разработке своего сайта WordPress вы сталкиваетесь с загвоздкой. Если вы не можете решить проблему самостоятельно, вы загружаете плагин.

    В этом случае вашему сайту может потребоваться калькулятор стоимости.И вот! Среди множества плагинов WordPress вы найдете множество плагинов для калькуляторов. Проблема решена, да?

    Неправильно!

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

    Плагины

    WordPress - это одновременно и благословение, и проклятие. С одной стороны, здорово иметь так много возможностей для расширения вашего сайта. С другой стороны, слишком много плагинов могут замедлить работу вашего сайта и вызвать конфликты, нарушающие работу сайта.

    Если не плагин калькулятора, то что?

    Итак, если вы согласны с тем, что слишком много плагинов - это «нет-нет», то что вам делать? Научиться программировать? Нанять разработчика? Какое здесь решение?

    Все просто: один плагин, чтобы управлять ими всеми!

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

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

    Более того, плагин форм может создавать контактные формы, формы заказов для калькуляторов цен электронной коммерции и множество других вещей для вашего веб-сайта. Formidable может делать все, что может делать плагин калькулятора WordPress, а также многое другое.

    Как добавить калькулятор WordPress с помощью шаблона

    Прежде чем мы познакомимся с нашим пошаговым руководством, давайте поговорим о шаблонах, позволяющих сэкономить время.Formidable Forms (наш отличный плагин для форм) содержит множество шаблонов, поэтому вы можете быстро и легко добавлять и настраивать калькуляторы на своем сайте.

    У нас есть длинный список шаблонов калькуляторов, но некоторые из них включают:

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

    Итак, независимо от того, какой у вас бизнес, для вашего сайта, вероятно, найдется шаблон быстрого калькулятора.Все, что вам нужно, это наш плагин!

    Примечание. Шаблоны калькуляторов доступны в наших премиальных планах.

    Загрузите плагин Formidable Forms

    Вот как добавить плагин Formidable Forms:

    1. На панели инструментов WordPress перейдите на страницу Plugins .
    2. Найдите "Formidable Forms" и загрузите наш плагин.
    3. Чтобы активировать плагин, следуйте инструкциям по установке в документации.

    После подключения вы увидите сообщение об успешном выполнении.Обновите страницу, и вы сможете увидеть премиум-функции.

    Создайте и настройте свой простой калькулятор

    Далее вы можете перейти к Грозный → Добавить новый . Откроется список наших шаблонов калькуляторов, который вы можете просмотреть вручную или воспользоваться окном поиска, чтобы найти нужный шаблон.

    Найдя нужный простой шаблон калькулятора, вы можете просмотреть его, нажав кнопку Предварительный просмотр , или вы можете начать настраивать его, нажав Создать форму .Вы увидите множество вариантов полей, которые вы можете добавить, например текст, флажки, HTML и другие.

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

    Опубликуйте свой калькулятор

    После настройки калькулятора вы можете опубликовать его на своем сайте, используя блок Formidable Forms или шорткод в виджете боковой панели. (Если вам интересно, вы можете использовать Formidable с редактором блоков Gutenberg и другими конструкторами страниц.)

    Самый простой способ добавить калькулятор - использовать блок WordPress. Вам просто нужно выбрать Добавить новый блок на любой странице или публикации, на которой должен отображаться калькулятор, выбрать функцию «Грозные формы», а затем выбрать свой калькулятор из раскрывающегося списка.

    И это все, что вам нужно сделать. Используя один из наших шаблонов, вы можете мгновенно разместить собственный калькулятор на своем сайте WordPress.

    Как добавить собственный калькулятор в WordPress с нуля

    Допустим, у вас нет бизнес-плана или вы предпочитаете начать с нуля.Это вообще не проблема. Вы по-прежнему можете создать калькулятор в WordPress, используя числовые поля и математическую формулу.

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

    У вас уже должен быть установлен плагин Formidable Forms (инструкции см. Выше), поэтому просто перейдите к Formidable → Добавить новый и создайте пустую форму.Вы получите параметры поля слева.

    Затем выполните следующие действия…

    Добавить числовые поля

    Первый базовый шаг - добавить нужные поля.

    Например, простому калькулятору процентов потребуются три поля: число, процент, который вы хотите найти, и значение.

    Независимо от того, какой калькулятор вы выберете, всякий раз, когда пользователю нужно ввести период времени (например, период ссуды для калькулятора платежа по ссуде), вы захотите установить диапазон чисел.Также рекомендуется заполнить поля Значение по умолчанию , Текст-заполнитель и Описание поля , где это необходимо.

    Это поможет пользователю понять, как вводить свою информацию.

    Создать поле итогов

    Теперь, когда у вас есть основные числа для расчета того, что вам нужно вычислить, пора добавить поле «Итого». Здесь появится окончательный расчет.

    Возвращаясь к примеру с калькулятором процентов, поле Итого будет представлять значение (число * процент = значение).

    Выделив это поле «Общее число», перейдите на вкладку «Дополнительно» и включите параметр «Калькулятор». Затем в поле «Значение по умолчанию (расчет)» введите формулу, необходимую для конкретного расчета.

    Формула простого процентного калькулятора будет выглядеть так:

    [НОМЕР ПОЛЯ №1] * [НОМЕР ПОЛЯ №2]

    Вы просто замените идентификаторы полей в скобках на идентификаторы полей вашей формы.

    Если вы создаете калькулятор для чего-нибудь еще, вам придется вычислить формулы или погуглить.Именно поэтому мы создали шаблоны - математика может сбивать с толку, и у вас, вероятно, нет времени разбираться с ней.

    Добавить дополнительные поля (необязательно)

    Теперь, когда ваш калькулятор готов, вы можете добавить дополнительные поля, например, поле «Электронная почта» для сбора адресов электронной почты.

    Чтобы добавить новое поле, просто просмотрите вкладку Все поля и найдите нужное. Затем добавьте его в свою форму. Это так просто!

    На этом этапе вы просто опубликуете калькулятор так же, как если бы вы использовали один из наших шаблонов (инструкции см. Выше).

    Подведение итогов

    Как видите, создать калькулятор WordPress с нуля может быть сложно. Это вполне возможно, но для этого может потребоваться вычисление формул и выполнение некоторых расчетов.

    Подробнее посты в блоге о калькуляторах WordPress


    Если математика пугает вас, мы настоятельно рекомендуем использовать шаблоны калькуляторов, которые мы для вас создали. Они разблокированы с нашими премиальными планами. Все, что вам нужно сделать, это щелкнуть и выбрать нужные поля, и все будет в порядке.

    Калькулятор цен

    | Microsoft Azure

  • Разработка и тестирование

    Упростите и ускорьте разработку и тестирование (разработка / тестирование) на любой платформе

  • DevOps

    Объединяйте людей, процессы и продукты, чтобы постоянно приносить пользу клиентам и коллегам.

  • DevSecOps

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

  • Электронная коммерция

    Предоставляйте покупателям то, что они хотят, благодаря персонализированному, масштабируемому и безопасному процессу покупок

  • Разработка игр

    Создавайте, быстро запускайте и надежно масштабируйте свои игры на разных платформах, а также улучшайте их на основе аналитики.

  • Интернет вещей

    Находите новые идеи, собирая неиспользованные данные с подключенных устройств, активов и датчиков.

  • Разработка приложений low-code в Azure

    Превратите свои идеи в приложения быстрее, используя правильные инструменты для работы.

  • Микросервисные приложения

    Создавайте масштабные надежные приложения и функциональные возможности и быстрее выводите их на рынок.

  • Мобильный

    Привлекайте клиентов везде и на любом устройстве с помощью единой сборки мобильного приложения.

  • Разработка современных приложений

    Быстрее реагируйте на изменения, оптимизируйте расходы и надежно отправляйте товары.

  • Бессерверные вычисления

    Создавайте приложения быстрее, избавляя от необходимости управлять инфраструктурой.

  • Службы обмена сообщениями в Azure

    Подключайте современные приложения к полному набору служб обмена сообщениями в Azure

  • Модернизация приложений и данных

    Ускорьте выход на рынок, предоставьте инновационные возможности и повысьте безопасность с помощью приложений Azure и модернизации данных.

  • Build vs. Buy Calculator

    Имеет ли смысл создавать собственный внутренний программный инструмент, если это уже сделал кто-то другой и хочет, чтобы вы его купили? Вы можете узнать это с помощью этого калькулятора сборки и покупки. Всего за несколько щелчков мышью вы определите, что позволит вам сэкономить больше в долгосрочной перспективе: сосредоточить внимание разработчиков на создании нового программного обеспечения или уплатить лицензионный сбор.

    Стоимость при покупке

    Если вы решите получить доступ к уже существующей платформе, которая работает по модели SaaS (программное обеспечение как услуга), вы должны заплатить ежемесячную или годовую плату .Обычно это единственные затраты, если вы соглашаетесь на внешнюю услугу.

    Затраты при постройке

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

    Стоимость постройки = N * T * CE

    где:

    • N - количество разработчиков в команде;
    • T - время, необходимое команде для создания этого программного обеспечения;
    • CE - стоимость на одного сотрудника.Обычно рассчитывается как

    CE = SE * (1 + OV)

    где

    • SE - месячная брутто-зарплата на одного сотрудника, а
    • OV - накладные расходы (например, страхование), выраженные в процентах от валовой заработной платы.

    Если вам известна только почасовая оплата вашего сотрудника, вы можете использовать этот почасовой калькулятор заработной платы.

    Помимо единовременных затрат, любое программное обеспечение, созданное внутри компании, требует некоторого обслуживания.Время от времени один (или несколько) ваших сотрудников будут посвящать свое время и усилия созданию продукта, который они создали. Годовые затраты на техническое обслуживание можно найти по следующей формуле:

    затраты на обслуживание = D * CE * 12/5

    где

    • D - количество дней в месяц, которое один из ваших сотрудников потратит на техническое обслуживание,
    • CE - стоимость на одного сотрудника,
    • 12 - количество месяцев в году, а
    • 5 - количество рабочих дней в неделе.

    Строить или покупать?

    Создание собственного программного обеспечения - это форма инвестиций. Вместо того, чтобы постоянно платить за лицензию, вы должны сначала инвестировать крупную сумму. Это означает, что если бы вы планировали использовать программу только один раз, создавать ее не имело бы никакого смысла. Преимущества проявляются только со временем - чем дольше вы пользуетесь собственным продуктом, тем меньше вы платите.

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

    безубыточность = стоимость строительства / (лицензионный сбор - стоимость обслуживания)

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

    Related posts

    Latest posts

    Leave a Comment

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *