Как разбить массив на круглые значения?

// данные могут меняться
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

→ Ссылка