Как разбить число на кратные значения между min и max?
Как разбить число на кратные значения между min и max ?
var interval = 6; // динамическое, меняется
var min = 212; // динамическое, меняется
var max = 641; // динамическое, меняется
На выводе нужно чтобы было примерно так:
var result = [200, 300, 400, 500, 600, 700];
Как видно min и max корректируются для кратности, min может только в меньшую сторону, а max только в большую
Задача очень сложная, старался как мог расписать
Ответы (1 шт):
Автор решения: Rickes417
→ Ссылка
Решил вопрос собственными силами, js правда очень плохо знаю
Написал две функции маленьких, вроде выполняют свою задачу которая мне нужна
function niceNum(localRange, round){
let exponent = Math.floor(Math.log10(localRange));
let fraction = localRange / Math.pow(10, exponent);
let niceFraction;
if(round){
if(fraction < 1.5) niceFraction = 1;
else if(fraction < 3) niceFraction = 2;
else if(fraction < 7) niceFraction = 5;
else niceFraction = 10;
}else{
if(fraction <= 1) niceFraction = 1;
else if(fraction <= 2) niceFraction = 2;
else if(fraction <= 5) niceFraction = 5;
else niceFraction = 10;
}
return niceFraction * Math.pow(10, exponent);
}
function getScale(min, max){
let maxTicks = 10;
let tickSpacing;
let range;
let niceMin;
let niceMax;
range = niceNum(max - min, false);
tickSpacing = niceNum(range / (maxTicks - 1), true);
niceMin = Math.floor(min / tickSpacing) * tickSpacing;
niceMax = Math.ceil(max / tickSpacing) * tickSpacing;
let result = [];
let step = niceMin;
let interval = (niceMax - niceMin) / tickSpacing;
for(let i=0; i<=interval; i++){
result.push(parseFloat(step.toFixed(8)));
step = step + tickSpacing;
}
return result;
}
console.log(getScale(212, 641));
console.log(getScale(5497, 9562));
console.log(getScale(.02317, .0421));