37なら40、1086なら2000、453992なら500000に丸めたいです。
申し訳ありませんが、これをより一般的に説明する方法がよくわかりませんが、基本的には、最も高い桁の数値は常に最も近い桁に切り上げ、残りはゼロになります。通常のものを丸める方法は知っていますが、桁数の変動をきれいに処理する方法がわかりません。
ありがとう、
編集: 4 から 10 のラウンドを削除しました。これは、残りのラウンドに適合しないように思われ、実際には必要ではなかったからです。
37なら40、1086なら2000、453992なら500000に丸めたいです。
申し訳ありませんが、これをより一般的に説明する方法がよくわかりませんが、基本的には、最も高い桁の数値は常に最も近い桁に切り上げ、残りはゼロになります。通常のものを丸める方法は知っていますが、桁数の変動をきれいに処理する方法がわかりません。
ありがとう、
編集: 4 から 10 のラウンドを削除しました。これは、残りのラウンドに適合しないように思われ、実際には必要ではなかったからです。
次の関数を使用します
function specialRoundUp(num) {
var factor = Math.pow(10, Math.floor(Math.log(num) / Math.LN10));
return factor * Math.ceil(num/factor);
}
みたいに読んだ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 ]
これは、整数以外の入力でも機能するはずです。
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 などに丸められます。