我试图四舍五入一个整数,但我似乎找不到一个javascript函数。
我已经尝试过math.floor,但这并不能解决问题。数字必须始终向下舍入,不确定是否有 javascript 函数?
例:
29 -> 20
4456 -> 4450
111 -> 110
9 -> 9//the number cant be 0
....
Math.floor(344);//returns 344 (it must be 340)
您可以使用 10 的幂四舍五入到最近的位置。
function ceil10(n, e) {
var m = Math.pow(10, e - 1);
return Math.ceil(n / m) * m || n;
}
function floor10(n, e) {
var m = Math.pow(10, e - 1);
return Math.floor(n / m) * m || n;
}
function roundNearestLog(n) {
var e = Math.ceil(Math.log(n + 1) / Math.LN10),
m = Math.pow(10, e - 1);
return Math.floor(n / m) < 5 ? floor10(n, e) : ceil10(n, e);
}
console.log('ceil 3 =', ceil10(344, 3)); // 400
console.log('ceil 2 =', ceil10(344, 2)); // 350
console.log('ceil 1 =', ceil10(344, 1)); // 344
console.log('ceil 0 =', ceil10(344, 0)); // 344
console.log('-------------');
console.log('floor 0 =', floor10(344, 0)); // 344
console.log('floor 1 =', floor10(344, 1)); // 344
console.log('floor 2 =', floor10(344, 2)); // 340 <-- What you want
console.log('floor 3 =', floor10(344, 3)); // 300
console.log('-------------');
console.log('near 3 =', roundNearestLog(3)); // 3
console.log('near 34 =', roundNearestLog(34)); // 30
console.log('near 344 =', roundNearestLog(344)); // 300
console.log('-------------');
console.log('near 6 =', roundNearestLog(6)); // 6
console.log('near 67 =', roundNearestLog(67)); // 70
console.log('near 677 =', roundNearestLog(677)); // 700
.as-console-wrapper { top: 0; max-height: 100% !important; }
您仍然可以使用 Math.floor,只需将答案移动一个数量级:
const moreFloor = n => Math.floor (n / 10) * 10 || n;
// (or if you prefer...)
function moreFloor (n) {
return Math.floor (n / 10) * 10 || n;
}
澄清一下,表达式末尾的|| n
是由于问题中的特殊要求,即不向下舍入任何小于 10 的数字。如果读者想要moreFloor(9) === 0
,您可以省略该部分。
嗯,这很奇怪,但这是我的答案。
function roundDown(numberToRound) {
//Check if the number would've rounded to 0
if (numberToRound < 10) return numberToRound;
//Return the number minus the difference to the nearest multiple of 10
return numberToRound - (numberToRound % 10);
}
您可以减去 10 的余数部分并检查该值是否为零。
function down(v) {
return v - v % 10 || v;
}
console.log(down(111));
console.log(down(30));
console.log(down(9));
console.log(down(0));