我将获得两个值bigValue&基于此的smallValue我应该设置maxValue& minValue,以下是解释的条件
if bigValue=42 & smallValue=23 then maxValue=50 & minValue=20
if bigValue=12 & smallValue=03 then maxValue=20 & minValue=0
if bigValue=0.156 & smallValue=0.1 then maxValue=0.2 & minValue=0.1
if bigValue=0.0156 & smallValue=0.01 then maxValue=0.02 & minValue=0.01
如何使用javascript更好的逻辑实现这一目标?
这里有bigValue& smallValue可以是任何值&两者都是积极的。
我有这个要求在图表中设置y轴的起点和终点。
答案 0 :(得分:9)
此提议适用于所需范围的10的对数。它适用于小数字,即使有一个最小/最大零值和负值。
function getBorders(min, max) {
var v = Math.pow(10, Math.floor(Math.log(Math.max(Math.abs(min), Math.abs(max))) / Math.log(10)));
return {
left: Math.floor(min / v) * v || 0,
right: Math.ceil(max / v) * v || 0
};
}
var values = [{ "min": 80, "max": 100 }, { "min": 23, "max": 42 }, { "min": 3, "max": 12 }, { "min": 0.1, "max": 0.156 }, { "min": 0.01, "max": 0.0156 }, { "min": 30, "max": 255 }, { "min": 1255, "max": 2784 }, { "min": 0.0023, "max": 0.00769 }, { "min": 0, "max": 0.002 }, { "min": 0, "max": 15000 }, { "min": -23, "max": 0 }, { "min": -123, "max": 2 }, { "min": 0, "max": 0 }];
values.forEach(function (a) {
var o = getBorders(a.min, a.max);
Object.keys(o).forEach(function (k) { a[k] = o[k]; });
});
console.log(values);

答案 1 :(得分:3)
如果根据示例情况,您的要求是将bigValue设置为最接近的十分之一,将smallValue设置为最接近的十分之一:以下内容对于正整数和正小数都应该正常工作。
使用三元运算符:
//if decimal: get the largest non-zero position
if (bigValue< 1) {
decBig = Math.ceil(-Math.log10(bigValue));}
if (smallValue< 1) {
decSmall = Math.ceil(-Math.log10(smallValue))};
maxValue = bigValue >= 1? Math.ceil(bigValue/10) *10 : Math.ceil(bigValue*Math.pow(10,decBig))/Math.pow(10,decBig);
minValue = smallValue>= 1? Math.floor(smallValue /10) *10 : Math.floor(smallValue*Math.pow(10,decBig))/Math.pow(10,decBig);
答案 2 :(得分:-1)
这应该是你的答案:
尝试更改函数调用参数的值
编辑:更新了代码段以满足您的上一个条件
function myFun(bigValue, smallValue) {
var min_val;
var max_val;
var min = Math.min(bigValue, smallValue);
var max = Math.max(bigValue, smallValue);
if(parseInt(bigValue)==0) {
var i = 1;
while(bigValue < 1){
bigValue *= 10;
i *= 10;
}
max_val = Math.ceil(bigValue)/i;
}
else {
max_val = Math.ceil(max/10)*10;
}
if(parseInt(smallValue)==0) {
var i = 1;
while(smallValue < 1){
smallValue *= 10;
i *= 10;
}
min_val = Math.floor(smallValue)/i;
}
else {
min_val = Math.floor(min/10)*10;
}
document.getElementById("demo").innerHTML = "Max value :" + max_val + ", Min value :" + min_val;
}
&#13;
<button onclick="myFun(0.156,0.1)">Decimal 1</button>
<button onclick="myFun(0.0156,0.01)">Decimal 2</button>
<button onclick="myFun(42,23)">Integer</button>
<p id="demo"></p>
&#13;
答案 3 :(得分:-3)
这是你在寻找什么?
if (bigValue===42 && smallValue===23){
maxValue=50 ;
minValue=20;
}
else if(bigValue===12 && smallValue===03){
maxValue=20 ;
minValue=0;
}
else if( bigValue===0.156 && smallValue===0.1){
maxValue=0.2 ;
minValue=0.1;
}