跳转到主要内容
eLearner.app
模块 2 · 第 3 课(共 4)课程中的7/32~10 min
模块课程(3/4)

数字和数学

In JavaScript there is only one numeric type: number. Both integers and decimals (floating point) live in there. No separate int / float like in other languages.

JS
typeof 42; // 'number'
typeof 3.14; // 'number'
typeof -0.001; // 'number'
typeof Infinity; // 'number'   ← Infinity is a special number
typeof NaN; // 'number'   ← even "Not a Number" is a number (!)

The global Math object

Math is not a function: it is an object with useful methods and constants. You don't instantiate it, you use it directly:

JS
Math.min(3, 1, 7); // 1
Math.max(3, 1, 7); // 7
Math.abs(-5); // 5
Math.round(4.5); // 5
Math.floor(4.9); // 4   (always rounds down)
Math.ceil(4.1); // 5   (always rounds up)
Math.sqrt(16); // 4
Math.pow(2, 10); // 1024   (equivalent to 2 ** 10)
Math.PI; // 3.141592653589793

Random numbers

Math.random() returns a decimal between 0 (included) and 1 (excluded). To get an integer in a range you use a small formula:

JS
// Random integer between 0 and 9
Math.floor(Math.random() * 10);

// Random integer between 1 and 6 (a six-sided die)
Math.floor(Math.random() * 6) + 1;

The pains of decimals (floating point)

JS uses the IEEE-754 64-bit representation, shared with almost all languages. It is a binary representation, so some decimals can't be represented exactly:

JS
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // false

Standard solution: round with toFixed(n) (which returns a string) or use integers in cents/thousandths when working with money:

JS
(0.1 + 0.2).toFixed(2); // '0.30' (string)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)

Try it

锻炼#js.m2.l3.e1
尝试:0加载中...

Compute the area of a circle with radius `r = 5` rounded to two decimal places, as a `number`. For `r=5` 78.54 is expected.

正在加载编辑器...
显示提示

Math.PI for pi, ** for exponentiation; .toFixed(2) to round, Number(...) to convert back to a number.

3 次尝试后可用的解决方案

Review exercise

锻炼#js.m2.l3.e2
尝试:0加载中...

Given three numbers 12, 7, 23, return as the last expression the difference between the max and the min (i.e. 16).

正在加载编辑器...
显示提示

Math.max and Math.min accept multiple comma-separated arguments.

3 次尝试后可用的解决方案