0

我有这个功能,我用它来找到一个好的仪表最大值。

function findGoodMax(x) {
  var y = Math.pow(10, x.toString().length - 1);
  x = (x/y);
  x = Math.ceil(x);
  x = x*y;
  return x || 10;
}

findGoodMax(33)   //=> 40
findGoodMax(76)   //=> 80
findGoodMax(543)  //=> 600
findGoodMax(1734) //=> 2000

问题是:

findGoodMax(0.1)      //=> 100
findGoodMax(0.00001)  //=> 1000000

如何修改我的函数以处理小数?

另外,我想

if (x > 10 && x < 100) {
  x = 100;
}

其他小数位数也是如此,基本上应该四舍五入到最接近的 10 次方。

处理负数也很好,所以-0.1会输出0,-0.01会输出-0.1,至少我认为这是有道理的。

4

2 回答 2

4

像这样的东西(小提琴:http: //jsfiddle.net/wSkss/5/)?

var findGoodMax = function(num){
    var s = num.toExponential().split('e');    
    //console.log(s);
    var pow = parseInt(s[1]);
    var isNegative = s[0][0] === "-";
    if (isNegative) {                
        if (pow === 0 || pow === -1) {
            return 0;
        } else if (pow < 0) {
            pow += 1;
        }
        return -Math.pow(10, pow);
    } else {
        return Math.pow(10, pow + 1);
    }
}

test output: 

33 : 100 
76 : 100 
543 : 1000 
1734 : 10000 
-543 : -100 
-1734 : -1000 
-0.00001 : -0.0001 
0.00001 : 0.0001 
-0.1 : 0 
0 : 10 
1 : 10 
5 : 10 
-5 : 0 
-33 : -10 
于 2013-11-13T23:48:14.840 回答
0

看到这个问题,我想我会解决它。第一次尝试 - 我认为这可行,但它可能会被破坏(我认为它目前不处理非整数,会解决这个问题)。

function findGoodMax(x) {
  if (x < 0) return 0; // Negative numbers.
  if (x < 1) return 1; // Decimals between 0 and 1.

  var i = 1;

  while (x % (10 ^ i)) {
    i++;
  }

  var y = Math.pow(10, i);
  x = (x/y);
  x = Math.ceil(x);
  x = x*y;
  return x || 10;
}
于 2013-11-13T23:47:10.307 回答