NetFish — 3 калькулятора в одном

Одно PWA-приложение: калькулятор веса и стоимости сетки + калькулятор стоимости сетки садка + калькулятор ЗУС. Работает офлайн после первого открытия.
Это приложение можно установить на главный экран телефона.
PWA

Калькулятор веса и стоимости сетки

0 г/м²
1 кг = м²
0 м²
Цена
0 сум/кг
Количество
0 кг
Площадь
0 м²
Итого
0 сум
Эквивалент
$ 0 USD
Расчет идет автоматически при изменении данных.
Отправить заказ по WhatsApp
WhatsApp: +998974531057
PWA

Калькулятор стоимости сетки садка

Rectangular cage
Прямоугольный
Round cage
Круглый / 8-гранный
Курс сегодня: 1 USD = 12,900 UZS
Нажмите группу — цена за м² подставится автоматически.
WhatsApp: +998903990025
ЗУС сетка
Схема ЗУС (длина × ширина)

Расчёт стоимости ЗУС — Защитно-улавливающие сетки

Калькулятор автоматически рассчитывает цену за 1 м², общую площадь, общую стоимость, ориентировочную грузоподъёмность и эквивалент в долларах США.
Постоянное значение

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

Стоимость 1 м²
30 000 сум
Общая площадь
21 м²
Общая стоимость
630 000 сум
Грузоподъёмность
110 кг/м²
Эквивалент в долларах США
48.46 $
Цена за 1 м² рассчитывается линейно по двум точкам: 40 мм = 30 000 сум/м² и 100 мм = 12 000 сум/м². Грузоподъёмность рассчитывается по формуле из калькулятора NetFish для нити 187×9 (≈3,2 мм), с коэффициентом крутки 0,8, запасом прочности 5 и прочностью полиамида 8 cN/dtex.
\n \n"; const zusBlob = new Blob([zusHtml], { type: "text/html" }); frame.removeAttribute("loading"); frame.src = URL.createObjectURL(zusBlob); function resizeFrame(){ try { const doc = frame.contentDocument || (frame.contentWindow && frame.contentWindow.document); if(!doc || !doc.body) return; const h = Math.max( doc.documentElement ? doc.documentElement.scrollHeight : 0, doc.body.scrollHeight || 0, doc.body.offsetHeight || 0 ); if(h) frame.style.height = (h + 20) + 'px'; } catch(e) {} } frame.addEventListener('load', function(){ resizeFrame(); setTimeout(resizeFrame, 300); setTimeout(resizeFrame, 1000); }); window.addEventListener('resize', resizeFrame); setInterval(resizeFrame, 1200); })();