Math.floor()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
Math.floor() éæ
æ¹æ³æå°çµ¦å®çæ¸åç¡æ¢ä»¶æ¨å»ï¼ä¸¦åå³å°æ¼æçæ¼è©²æ¸åçæå¤§æ´æ¸ã
å試ä¸ä¸
console.log(Math.floor(5.95));
// é æè¼¸åºï¼5
console.log(Math.floor(5.05));
// é æè¼¸åºï¼5
console.log(Math.floor(5));
// é æè¼¸åºï¼5
console.log(Math.floor(-5.05));
// é æè¼¸åºï¼-6
èªæ³
Math.floor(x)
忏
x-
ä¸åæ¸åã
åå³å¼
å°æ¼æçæ¼ x çæå¤§æ´æ¸ãå
¶å¼è -Math.ceil(-x) ç¸åã
æè¿°
å çº floor() æ¯ Math çéæ
æ¹æ³ï¼æä»¥ä½ æè©²ç¸½æ¯ä½¿ç¨ Math.floor()ï¼è䏿¯å¨ä½ 建ç«ç Math ç©ä»¶ä¸å¼å«æ¹æ³ï¼Math 䏿¯ä¸å建æ§åï¼ã
ç¯ä¾
>ä½¿ç¨ Math.floor()
Math.floor(-Infinity); // -Infinity
Math.floor(-45.95); // -46
Math.floor(-45.05); // -46
Math.floor(-0); // -0
Math.floor(0); // 0
Math.floor(4); // 4
Math.floor(45.05); // 45
Math.floor(45.95); // 45
Math.floor(Infinity); // Infinity
å°æ¸èª¿æ´
卿¤ç¯ä¾ä¸ï¼æå實ä½äºä¸ååçº decimalAdjust() çæ¹æ³ï¼å®æ¯ Math.floor()ãMath.ceil() å Math.round() çå¢å¼·æ¹æ³ãéç¶éä¸å Math å½å¼ç¸½æ¯å°è¼¸å
¥èª¿æ´å°å使¸ï¼ä½ decimalAdjust æ¥åä¸å exp 忏ï¼è©²åæ¸æå®äºæ¸åæèª¿æ´å°å°æ¸é»å·¦å´ç使¸ãä¾å¦ï¼-1 表示å®å°å¨å°æ¸é»å¾ä¿çä¸ä½æ¸åï¼å¦åãà 10-1ãï¼ãæ¤å¤ï¼å®éå
è¨±ä½ éé type åæ¸é¸æèª¿æ´æ¹å¼ââroundãfloor æ ceilã
å®ééå°æ¸åä¹ä»¥ 10 çæ¬¡æ¹ï¼ç¶å¾å°çµæåæ¨äºå
¥å°ææ¥è¿çæ´æ¸ï¼åé¤ä»¥ 10 çæ¬¡æ¹ä¾å¯¦ç¾ãçºäºæ´å¥½å°ä¿æç²¾åº¦ï¼å®å©ç¨äº Number ç toString() æ¹æ³ï¼è©²æ¹æ³ä»¥ç§å¸è¨èï¼å¦ 6.02e23ï¼è¡¨ç¤ºå¤§æ¸æå°æ¸ã
/**
* å°æ¸å調æ´å°æå®ç使¸ã
*
* @param {"round" | "floor" | "ceil"} type 調æ´çé¡åã
* @param {number} value æ¸åã
* @param {number} exp ææ¸ï¼èª¿æ´åºæ¸ç 10 å°æ¸ï¼ã
* @returns {number} 調æ´å¾çå¼ã
*/
function decimalAdjust(type, value, exp) {
type = String(type);
if (!["round", "floor", "ceil"].includes(type)) {
throw new TypeError(
"å°æ¸èª¿æ´çé¡åå¿
é æ¯ 'round'ã'floor' æ 'ceil' ä¹ä¸ã",
);
}
exp = Number(exp);
value = Number(value);
if (exp % 1 !== 0 || Number.isNaN(value)) {
return NaN;
} else if (exp === 0) {
return Math[type](value);
}
const [magnitude, exponent = 0] = value.toString().split("e");
const adjustedValue = Math[type](`${magnitude}e${exponent - exp}`);
// ç§»å
const [newMagnitude, newExponent = 0] = adjustedValue.toString().split("e");
return Number(`${newMagnitude}e${Number(newExponent) + exp}`);
}
// å°æ¸åæ¨äºå
¥
const round10 = (value, exp) => decimalAdjust("round", value, exp);
// å°æ¸ç¡æ¢ä»¶æ¨å»
const floor10 = (value, exp) => decimalAdjust("floor", value, exp);
// å°æ¸ç¡æ¢ä»¶é²ä½
const ceil10 = (value, exp) => decimalAdjust("ceil", value, exp);
// 忍äºå
¥
round10(55.55, -1); // 55.6
round10(55.549, -1); // 55.5
round10(55, 1); // 60
round10(54.9, 1); // 50
round10(-55.55, -1); // -55.5
round10(-55.551, -1); // -55.6
round10(-55, 1); // -50
round10(-55.1, 1); // -60
// ç¡æ¢ä»¶æ¨å»
floor10(55.59, -1); // 55.5
floor10(59, 1); // 50
floor10(-55.51, -1); // -55.6
floor10(-51, 1); // -60
// ç¡æ¢ä»¶é²ä½
ceil10(55.51, -1); // 55.6
ceil10(51, 1); // 60
ceil10(-55.59, -1); // -55.5
ceil10(-59, 1); // -50
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-math.floor> |