我想使用Javascript来舍入一个数字。 例如,像这样,
15 => 20
345 => 400
201 => 300
180 => 200
93 => 100
22 => 30
如何使用Javascript实现这一目标?我知道我可以使用Math.ceil或Math.round,但这不是十进制数。
答案 0 :(得分:2)
要舍入到最接近的100的倍数,您可以写
100*Math.ceil(x/100)
与其他因素相似。
选择“好”因素可能是一个不同的问题。您可以将数字的基数为10的对数乘以三和圆。然后您可以应用以下地图:
3*round(log10(x)) factor
0 1
1 2
2 5
3 10
4 20
5 50
您不必存储该表:使用模运算,您可以计算因子的前导数字,并使用第三部分的底数获得尾随零的数量。
这是否合适取决于您的申请。你问题中的代码似乎只使用10的幂。在这种情况下,不要在上面的方法中乘以3,而是直接使用基数10日志的底数:
factor = Math.pow(10, Math.floor(Math.log(x)/Math.log(10)));
rounded = Math.ceil(x/factor)*factor;
答案 1 :(得分:1)
第一个例子的解决方案:
var n = 15;
n /= 10; //n = 1.5
n = Math.ceil(n); //n = 2
n *= 10; //n = 20
其他示例的工作方式相同。
答案 2 :(得分:1)
您想要的答案取决于精确度。
基本解决方案是
function round(num, precision) {
var div = Math.pow(10, precision);
return Math.ceil(num/div)*div;
}
答案 3 :(得分:0)
你将你的数字除以10/100/1000得到小数,然后是ceil / round。然后再次相乘。
这是我想到的第一个解决方案。