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