使用浮点数根据数组获取 y 轴 max/min 值
Get y-axis max/min value based on array using floating point numbers
我一直在使用我编写的脚本来计算给定数组时 SVG/HTML5 Canvas 图的 y 轴 Min/Max 标签。
例如 [124, 721, 361, 297, 177, 21] y 轴最小标签 = 0 | y 轴最大标签 = 750
它在处理整数时效果很好,但不适用于浮点值。
我怎样才能让它与浮点值一起工作?
这些是我用来计算最小值和最大值的函数
// Calculate y-axis Max label value
function yMax (numArray) {
var max = getMaxOfArray(numArray);
var yRange = getRangeOfArray(numArray);
var yPow = Math.pow(10, yRange.toString().length - 1) /2;
// (/2) division added for more accurate result
return Math.ceil(max / yPow) * yPow
}
// Calculate y-axis Min label value
function yMin (numArray) {
var min = getMinOfArray(numArray);
var yRange = getRangeOfArray(numArray);
var yPow = Math.pow(10, yRange.toString().length - 1) ;
return Math.floor(min / yPow) * yPow
}
我已经包含了我提到的有用数学函数的脚本。
// Get Max value from array
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
// Get Min value from array
function getMinOfArray(numArray) {
return Math.min.apply(null, numArray);
}
// Get Range of array
function getRangeOfArray (numArray) {
var max = getMaxOfArray(numArray);
var min = getMinOfArray(numArray);
return max - min;
}
将yRange.toString().length
改为1 + Math.floor(Math.log(yrange)/LOG10);
,其中LOG10
是一个常量,只需要初始化一次为LOG10 = Math.log(10);
。这将适用于浮点数并且对整数具有相同的行为。
我一直在使用我编写的脚本来计算给定数组时 SVG/HTML5 Canvas 图的 y 轴 Min/Max 标签。
例如 [124, 721, 361, 297, 177, 21] y 轴最小标签 = 0 | y 轴最大标签 = 750
它在处理整数时效果很好,但不适用于浮点值。 我怎样才能让它与浮点值一起工作?
这些是我用来计算最小值和最大值的函数
// Calculate y-axis Max label value
function yMax (numArray) {
var max = getMaxOfArray(numArray);
var yRange = getRangeOfArray(numArray);
var yPow = Math.pow(10, yRange.toString().length - 1) /2;
// (/2) division added for more accurate result
return Math.ceil(max / yPow) * yPow
}
// Calculate y-axis Min label value
function yMin (numArray) {
var min = getMinOfArray(numArray);
var yRange = getRangeOfArray(numArray);
var yPow = Math.pow(10, yRange.toString().length - 1) ;
return Math.floor(min / yPow) * yPow
}
我已经包含了我提到的有用数学函数的脚本。
// Get Max value from array
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
// Get Min value from array
function getMinOfArray(numArray) {
return Math.min.apply(null, numArray);
}
// Get Range of array
function getRangeOfArray (numArray) {
var max = getMaxOfArray(numArray);
var min = getMinOfArray(numArray);
return max - min;
}
将yRange.toString().length
改为1 + Math.floor(Math.log(yrange)/LOG10);
,其中LOG10
是一个常量,只需要初始化一次为LOG10 = Math.log(10);
。这将适用于浮点数并且对整数具有相同的行为。