JavaScript 中的整数四舍五入?
Rounding-off from whole numbers to whole numbers in JavaScript?
所以我有一些数字 x = 320232
y = 2301
z = 12020305
。我想使用 JavaScript 对这些数字进行四舍五入,以便它们变为 x = 320000
y = 2300
z = 12000000
.
我尝试了 Math.round
和 Math.floor
但事实证明它们只适用于小数值,例如
a = 3.1; Math.round(a); // Outputs 3
而不是整数。
所以我的问题是我们可以使用 JavaScript 对整数进行舍入吗?如果是,那么如何?
编辑:我希望它舍入到上面变量中看到的起始 3 位数字。就像如果有另一个变量叫做 c = 423841
它应该四舍五入成为 c = 424000
.
您可以使用 10 的对数并调整数字。
const
format = n => v => {
if (!v) return 0;
const l = Math.floor(Math.log10(Math.abs(v))) - n + 1;
return Math.round(v / 10 ** l) * 10 ** l;
};
console.log([0, -9876, 320232, 2301, 12020305, 123456789].map(format(3)));
解决方法是先算出需要舍入多少个数,然后在一个舍入中使用。
Math.round(1234/100)*100
会四舍五入到 1200
所以我们可以用它来四舍五入。然后我们只需要确定在此示例中用什么替换 100。
那就是 1 后跟 LENGTH - 3
个零。该数字可以计算为 10 的 LENGTH - 3
次方,在 JS 中:10 ** (length - 3)
.
var x = 320232;
var y = 2301;
var z = 12020305;
function my_round(number){
var org_number = number;
// calculate integer number
var count = 0;
if (number >= 1) ++count;
while (number / 10 >= 1) {
number /= 10;
++count;
}
// length - 3
count = Math.round(count) - 3;
if (count < 0){
count = 0;
}
// 10 to the power of (length - 3)
var helper = 10 ** count;
return Math.round(org_number/helper)*helper;
}
alert(my_round(x));
alert(my_round(y));
alert(my_round(z));
这不是最漂亮的代码,尽管我试图让它成为可解释的代码。
这应该有效:
function roundToNthPlace(input, n) {
let powerOfTen = 10 ** n
return Math.round(input/powerOfTen) * powerOfTen;
}
console.log([320232, 2301,12020305, 423841].map(input => roundToNthPlace(input, 3)));
Output: [320000, 2000, 12020000, 424000]
所以我有一些数字 x = 320232
y = 2301
z = 12020305
。我想使用 JavaScript 对这些数字进行四舍五入,以便它们变为 x = 320000
y = 2300
z = 12000000
.
我尝试了 Math.round
和 Math.floor
但事实证明它们只适用于小数值,例如
a = 3.1; Math.round(a); // Outputs 3
而不是整数。
所以我的问题是我们可以使用 JavaScript 对整数进行舍入吗?如果是,那么如何?
编辑:我希望它舍入到上面变量中看到的起始 3 位数字。就像如果有另一个变量叫做 c = 423841
它应该四舍五入成为 c = 424000
.
您可以使用 10 的对数并调整数字。
const
format = n => v => {
if (!v) return 0;
const l = Math.floor(Math.log10(Math.abs(v))) - n + 1;
return Math.round(v / 10 ** l) * 10 ** l;
};
console.log([0, -9876, 320232, 2301, 12020305, 123456789].map(format(3)));
解决方法是先算出需要舍入多少个数,然后在一个舍入中使用。
Math.round(1234/100)*100
会四舍五入到 1200
所以我们可以用它来四舍五入。然后我们只需要确定在此示例中用什么替换 100。
那就是 1 后跟 LENGTH - 3
个零。该数字可以计算为 10 的 LENGTH - 3
次方,在 JS 中:10 ** (length - 3)
.
var x = 320232;
var y = 2301;
var z = 12020305;
function my_round(number){
var org_number = number;
// calculate integer number
var count = 0;
if (number >= 1) ++count;
while (number / 10 >= 1) {
number /= 10;
++count;
}
// length - 3
count = Math.round(count) - 3;
if (count < 0){
count = 0;
}
// 10 to the power of (length - 3)
var helper = 10 ** count;
return Math.round(org_number/helper)*helper;
}
alert(my_round(x));
alert(my_round(y));
alert(my_round(z));
这不是最漂亮的代码,尽管我试图让它成为可解释的代码。
这应该有效:
function roundToNthPlace(input, n) {
let powerOfTen = 10 ** n
return Math.round(input/powerOfTen) * powerOfTen;
}
console.log([320232, 2301,12020305, 423841].map(input => roundToNthPlace(input, 3)));
Output: [320000, 2000, 12020000, 424000]