Javascript 四舍五入到最近的

Javascript 四舍五入到最近的,javascript,Javascript,如果数字是37,我希望它四舍五入到40,如果数字是1086,我希望它四舍五入到2000。如果这个数字是453992,我希望它能凑到500000 我真的不知道如何更笼统地描述这一点,对不起,但基本上,最高位置的数字应该总是四舍五入到最近的数字,其余的变成零。我知道如何正常地取整东西,只是不知道如何干净地处理数字之间的变化 谢谢 编辑:我删除了4到10轮,因为这一轮似乎与其余的不匹配,也不是真的需要。获取原始数字的长度: var num; var count = num.toString().len

如果数字是37,我希望它四舍五入到40,如果数字是1086,我希望它四舍五入到2000。如果这个数字是453992,我希望它能凑到500000

我真的不知道如何更笼统地描述这一点,对不起,但基本上,最高位置的数字应该总是四舍五入到最近的数字,其余的变成零。我知道如何正常地取整东西,只是不知道如何干净地处理数字之间的变化

谢谢


编辑:我删除了4到10轮,因为这一轮似乎与其余的不匹配,也不是真的需要。

获取原始数字的长度:

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
}

假设所有值都是正整数:

function roundUp(x){

    var y = Math.pow(10, x.toString().length-1);

    x = (x/y);
    x = Math.ceil(x);
    x = x*y;
    return x;
}

现场演示:

我将使用以下功能

function specialRoundUp(num) {
    var factor = Math.pow(10, Math.floor(Math.log(num) / Math.LN10));
    return factor * Math.ceil(num/factor);
}

我读起来像是
最近的整数,它是一个整数和一些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 ]

这也适用于非整数输入。

如果您想将四舍五入到最接近的10次方,请尝试以下方法(javascript)

函数Round2NearestPowerOf10(x){
x=数学圆(x);
var strLen=x.toString().length;
变量y=x/数学功率(10,斯特伦);
var rst=数学功率(10,strLen-1+数学轮(y));
返回rst<10?10:rst;
}
结果将四舍五入到101001000,等等。

我的花式版本可以正确地使用小数和负数,并根据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

一个简单的谷歌显示:@limelights你的“简单谷歌”没有回答这个问题
Math.round(37)=37
我相信如果您阅读了示例中实现向上取整到10的函数,您会发现这一点,好先生。如果第一个之后的所有数字都已经是0,比如4000,该怎么办?你希望它是5000还是保持4000?假设这些都是正整数,你可以像这样添加负数:
函数roundUp(x){var negative=false;if(x<0){negative=true;x*=-1;}var y=Math.pow(10,x.toString().length-1);x=(x/y);x=Math.ceil(x);x=x*y;if(负)x*=-1;返回x;}
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