function convertMiniInteger()

in src/common/tickMethod.ts [32:138]


function convertMiniInteger(dMin: number, dMax: number, n: number = 5, onlyLoose: boolean = true,) {
  // 处理小于 0 和小数的 tickCount
  const m = n < 0 ? 0 : Math.round(n);

  // nan 也会导致异常
  if (Number.isNaN(dMin) || Number.isNaN(dMax) || typeof dMin !== 'number' || typeof dMax !== 'number' || !m) {
    return {
      min: 0,
      max: 0,
      ticks: [],
    };
  }

  // js 极大值极小值问题,差值小于 1e-15 会导致计算出错
  if (dMax - dMin < 1e-15 || m === 1) {
    return {
      min: dMin,
      max: dMax,
      ticks: [dMin],
    };
  }

  if (!onlyLoose) {
    return undefined;
  }

  // 相差只有 1
  if (dMax - dMin <= 1) {
    if (dMin >= 0 && dMin < 1) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: 0,
        max: 2,
        ticks: [0, 1, 2],
      };
    } else if (dMax > -1 && dMax <= 0) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: -2,
        max: 0,
        ticks: [-2, -1, 0],
      };
    } else {
      return {
        min: dMin - 1,
        max: dMax + 1,
        ticks: [dMin - 1, dMin, dMax, dMax + 1],
      };
    }
  }

  // 相差只有 2
  if (dMax - dMin <= 2) {
    if (dMin >= 0 && dMin < 1) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: 0,
        max: 3,
        ticks: [0, 1, 2, 3],
      };
    } else if (dMax > -1 && dMax <= 0) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: -3,
        max: 0,
        ticks: [-3, -2, -1, 0],
      };
    } else {
      const min = Math.round(dMin - 1);
      const max = Math.round(dMax + 1);
      return {
        min,
        max,
        ticks: [min, dMin, dMin + Math.round((dMax - dMin) / 2) ,dMax, max],
      };
    }
  }

  // 相差 9 / 10
  if (dMax - dMin === 9 || dMax - dMin === 10) {
    if (dMin >= 0 && dMin < 1) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: 0,
        max: 10,
        ticks: [0, 2, 4, 6, 8, 10],
      };
    } else if (dMax > -1 && dMax <= 0) {
      // 值域两端接近 0,则不跨越 0
      return {
        min: -10,
        max: 0,
        ticks: [-10, -8, -6, -4, -2, 0],
      };
    // } else {
    //   const min = Math.round(dMin - 1);
    //   const max = Math.round(dMax - 1);
    //   return {
    //     min,
    //     max,
    //     ticks: [min, dMin, Math.round((dMax - dMin) / 2) ,dMax, max],
    //   };
    }
  }

  return undefined;
}