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;
}