我有这个功能,我用它来为仪表找到一个很好的最大值。
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,至少我认为这是有意义的。
答案 0 :(得分: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
答案 1 :(得分: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;
}