Как разбить массив на круглые значения?
// данные могут меняться
let min = 2.52;
let max = 5.21;
// как из min и max сделать такой массив?
let arr = [
2.50, // должен быть меньше минимального
3.00,
3.50,
4.00,
4.50,
5.00,
5.50 // должен быть больше максимального
];
console.log(arr);
Вообщем делаю я график, и это цены которые будут выводиться в canvas в правой части от графика, нужно что то типа деления на разряды, к примеру не больше 10 значений
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
console.log( get_steps(2.52, 5.21) );
console.log( get_steps(-2.52, 1.4) );
function get_steps(min, max) {
min = Math.floor( min * 2 ) / 2; // 2.52 * 2 → floor 5.04 → 5.0 / 2 → 2.5
max = Math.ceil( max * 2 ) / 2; // 5.21 * 2 → ceil 10.42 → 11.0 / 2 → 5.5
return new Array(1 + (max - min) / 0.5).fill(0).map((e,i) => min + i * 0.5);
}
Последнюю строчку с return можно заменить на такую:
let result = [];
for( let i = min; i <= max; i += 0.5 ) {
result.push( i );
}
return result;
P.s. Если шаги будут не по 0.5, а другими дробями, придется дополнительно решать проблему потери точности (если она важна). Потому что:
console.log( 0.1 + 0.1 + 0.1 ); // 0.30000000000000004