0

假设我们有一个数组 [0.09, 870, 499] 并且我们想要得到数组值,所以:[0.1, 1000, 100]?

我尝试了什么:

var logarithmicRound = function(val) {
 var degree =  Math.round(Math.log(val) / Math.LN10);

    if(Math.pow(10, degree) - val > val) {
        --degree;
    }
    return Math.pow(10, degree);
};

console.log(logarithmicRound(0.05));
console.log(logarithmicRound(0.7));
console.log(logarithmicRound(49));
console.log(logarithmicRound(50));
console.log(logarithmicRound(400));
console.log(logarithmicRound(800));

// prints
//0.1
//1 
//10
//100
//100
//1000

然而它看起来很丑陋......但它正是我所需要的。

4

3 回答 3

1

我使用了几个函数来舍入数字,它们可能很有用。

function roundTo2(value){
return (Math.round(value * 100) / 100);
}



function roundResult(value, places){
    var multiplier = Math.pow(10, places);
    return (Math.round(value * multiplier) / multiplier);
}

您显然需要对数字进行四舍五入并放入数组/提取,四舍五入,放回 - 不如其他人的答案那么有效

于 2013-07-24T10:41:16.410 回答
1

假设您希望四舍五入到最接近的 10 次幂(并且您的 499 舍入到 100 的示例不正确):

var rounded = myArray.map(function(n) {
    return Math.pow(10, Math.ceil(Math.log(n) / Math.LN10));
});
于 2013-07-24T10:52:08.670 回答
0

从给定的示例中,@DuckQueen 似乎想要四舍五入到最接近的 10 次幂。

这是算法 -

1. Represent each number N in scientific notation S. Lets say S is n*10^x
2. Let A =(N - (10 power x)) and B=((10 pow x+1) - N)
3. if A<B N = 10^x otherwise N=10^(x+1)

对于 A==B 的情况,您可以假设一种或另一种方式

将此用于第 1 步:

于 2013-07-24T10:54:24.790 回答