如果数字是37,我希望它可以舍入到40,如果数字是1086,我希望它可以舍入到2000.如果数字是453992,我希望它可以舍入到500000.
我真的不知道如何更普遍地描述这一点,抱歉,但基本上,最高位置的数字应始终向上舍入到最接近的数字,其余数字变为零。我知道如何正常地填充东西,我只是不知道如何干净地处理数字位数之间的变化。
谢谢,
编辑:我删除了4到10轮,因为那个似乎不适合其余的,并不是真的有必要。
答案 0 :(得分:8)
假设所有值都是正整数:
function roundUp(x){
var y = Math.pow(10, x.toString().length-1);
x = (x/y);
x = Math.ceil(x);
x = x*y;
return x;
}
答案 1 :(得分:3)
我的花哨的版本正确使用小数和负数并正确舍入到最近 10次幂作为OP请求:
roundToNearestPow(value) {
var digits = Math.ceil(Math.log10(Math.abs(value) + 1));
var pow = Math.pow(10, digits - 1);
return Math.round(value / pow) * pow;
}
// roundToNearestPow(-1499.12345) => 1000
// roundToNearestPow( 1500.12345) => 2000
答案 2 :(得分:2)
我会使用以下功能
function specialRoundUp(num) {
var factor = Math.pow(10, Math.floor(Math.log(num) / Math.LN10));
return factor * Math.ceil(num/factor);
}
答案 3 :(得分:0)
获取原始号码的长度:
var num;
var count = num.toString().length;
获取第一个号码:
var first = num.toString().substring(0, 1);
然后只需++,并添加count-1零
来自评论
确保号码不是10的产物:
if((num % 10) != 0)
{
//do all above in this closure
}
答案 4 :(得分:0)
我读的就像nearest integer, which is production of an integer and some power of 10
你可以通过
获得var myCeil = function(num){
var power = Math.log(num,10) * Math.LOG10E;
var head = Math.floor(power);
var rest = power - orig;
return Math.ceil(Math.pow(10,next))*Math.pow(10,orig);
}
i = [37, 1086, 453992];
console.log( i.map(myCeil) );
// -> [ 40, 2000, 500000 ]
这也适用于非整数输入。
答案 5 :(得分:0)
如果你想要回合10的最近力量,试试这个(javascript)
function Round2NearestPowerOf10(x) {
x = Math.round(x);
var strLen = x.toString().length;
var y = x / Math.pow(10, strLen);
var rst = Math.pow(10, strLen - 1 + Math.round(y));
return rst < 10 ? 10 : rst;
}
结果将四舍五入为10,100,1000等。