0 до 40. Есть возможность их как то сопоставить? Что бы 500=40, а 1=0. Только для каждого числа из первого диапазона.
Ну ты сам напиши
а какая логика? я чет туплю
Напиши, что этим добится хочешь, что с помощью этого хочешь сделать?
Проценты в помощь
точно, спасибо xd
да калькулятор делаю, коэффициент нужен. Но я вроде четко задачу обозначил, зачем цель расписывать
В том то и дело что задача не особо четко написана, по моему.
function maprange(a){ return (a-1)*40/499; // 1-500 <-> 0-40 // 1+( 0-499 ) <--> 0-40 } function maprange_reverse(b){ return b*499/40+1; } console.log( maprange(500) ) // 40 console.log( maprange(1) ) // 0 console.log( maprange_reverse(0) ) // 1 console.log( maprange_reverse(40) ) // 50 console.log( maprange(250) ) // 19.95991983967936 console.log( maprange_reverse(20) ) // 250.5
Красиво, спасибо
а назачем это, если не секрет?)
калькулятор коммерческий, расчет цены, нужен конкретный коэффициент постепенно увеличивающийся в зависимости от диапазона, потом я его умножаю на число в цикле что бы в зависимости от сложности и объема работ правильно рассчитать цену, типо того
ох, прикольно. Но кстати если интересно, вроде есть функция общего вида, которая преобразовывает один диапазон в другой такая используется чтобы Math.random() превратить в функцию как в php mt_rand() где указывается два int'а
function rangemap(x,a,b,c,d){ return (x-a)*(d-c)/(b-a)+c; } rangemap(3,1,5,11,21) // 16 rangemap(250,1,500,0,40) // 19.95991983967936 rangemap(20,0,40,1,500) // 250.5во, написал и вспомнил как оно называется - оно называется lerp (linear interpolation) только там на вход даётся три значения доля (число от 0 до 1), начало и конец диапазона вот, вспомнил, загуглил, первый результат // https://suvitruf.ru/2019/03/13/4305/a-brief-introduction-to-lerp/ function lerp(start, end, t) { return start * (1 - t) + end * t; }почти то же самое, ток в моей функции по сути мы пересчитываем свой диапазон в 0-1 и уже по похожей формуле считаем
круто, но я оказывается все правильно делал несколько раз. Оказалось что js числа воспринимал как строки, и я при сложении например 350 и 400 получал 350400, выяснил это когда начал выводить все переменные и искать ошибку. Перевел тип данных в числовые и все заработало))
о да, сам много раз так попадал) ничего, скоро ещё у тебя будут в корзине значения вида 1234.30000000000000004 и 4321.19999999999999996
для счета после запятой спер такую функцию function roundTwoDigits(x) { var k = (Math.round(x * 100)/ 100).toString(); k += (k.indexOf('.') == -1)? '.00' : '00'; var p = k.indexOf('.'), m = k.indexOf('-.'); var f = (p === 0 || m === 0)? '0.' : '.'; return k.substring(0, p) + f + k.substring(p+1, p+3); }
надо было спереть вот эту function roundTwoDigits(x) { return (+x).toFixed(2); }
так у него функция тоже округляет
это чтобы обрезать. а при расчете денег надо именно округлять
Обсуждают сегодня