如何根据给定值获取最小值和最大值?

时间:2016-02-23 12:36:48

标签: javascript

我将获得两个值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轴的起点和终点。

4 个答案:

答案 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)

这应该是你的答案:

尝试更改函数调用参数的值

编辑:更新了代码段以满足您的上一个条件

&#13;
&#13;
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;
&#13;
&#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;
}