JavaScript 提供了多种处理数字的方法和属性,下面我将详细介绍常用的 Number 处理方法,包括 Number.isNaN()、Number.parseInt() 等。
1. Number 构造函数方法
Number.isNaN()
判断一个值是否是 NaN(比全局的 isNaN() 更严格)。
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(0/0)); // true
console.log(Number.isNaN('NaN')); // false (全局 isNaN() 会返回 true)
console.log(Number.isNaN(123)); // false
Number.isFinite()
判断一个值是否是有限的数字(比全局的 isFinite() 更严格)。
console.log(Number.isFinite(123)); // true
console.log(Number.isFinite(-1.23)); // true
console.log(Number.isFinite('123')); // false (全局 isFinite() 会返回 true)
console.log(Number.isFinite(Infinity)); // false
Number.isInteger()
判断一个值是否是整数。
console.log(Number.isInteger(25)); // true
console.log(Number.isInteger(25.0)); // true
console.log(Number.isInteger(25.1)); // false
console.log(Number.isInteger('25')); // false
Number.isSafeInteger()
判断一个值是否是安全整数(在 -(2^53 - 1) 到 2^53 - 1 范围内)。
console.log(Number.isSafeInteger(3)); // true
console.log(Number.isSafeInteger(Math.pow(2, 53))); // false
console.log(Number.isSafeInteger(Math.pow(2, 53) - 1)); // true
Number.parseInt() / Number.parseFloat()
与全局的 parseInt() 和 parseFloat() 功能相同。
console.log(Number.parseInt('123.45')); // 123
console.log(Number.parseFloat('123.45')); // 123.45
console.log(Number.parseInt('101', 2)); // 5 (二进制解析)
2. Number 原型方法
toFixed()
将数字转换为字符串,保留指定小数位数。
const num = 123.456;
console.log(num.toFixed(2)); // "123.46" (四舍五入)
console.log(num.toFixed(0)); // "123"
console.log(num.toFixed(5)); // "123.45600"
toExponential()
将数字转换为指数计数法的字符串。
console.log(num.toExponential(2)); // "1.23e+2"
console.log(num.toExponential(4)); // "1.2346e+2"
toPrecision()
根据指定的有效数字位数格式化数字。
console.log(num.toPrecision(5)); // "123.46"
console.log(num.toPrecision(2)); // "1.2e+2"
console.log(num.toPrecision(7)); // "123.4560"
toString()
将数字转换为指定基数的字符串。
console.log((10).toString(2)); // "1010" (二进制)
console.log((255).toString(16)); // "ff" (十六进制)
console.log((10).toString()); // "10" (十进制)
3. 数字转换方法
全局 parseInt() / parseFloat()
将字符串转换为整数/浮点数。
console.log(parseInt('123')); // 123
console.log(parseInt('123.45')); // 123
console.log(parseInt('ff', 16)); // 255 (十六进制)
console.log(parseFloat('123.45')); // 123.45
一元加号 (+)
快速将字符串转换为数字。
console.log(+"123"); // 123
console.log(+"123.45"); // 123.45
console.log(+"abc"); // NaN
4. 数学运算相关
Math 对象常用方法
console.log(Math.abs(-5)); // 5 (绝对值)
console.log(Math.round(4.6)); // 5 (四舍五入)
console.log(Math.floor(4.9)); // 4 (向下取整)
console.log(Math.ceil(4.1)); // 5 (向上取整)
console.log(Math.max(1, 3, 2)); // 3
console.log(Math.min(1, 3, 2)); // 1
console.log(Math.random()); // 0到1之间的随机数
console.log(Math.pow(2, 3)); // 8 (2的3次方)
console.log(Math.sqrt(16)); // 4 (平方根)
指数运算符 (**)
console.log(2 ** 3); // 8 (等同于 Math.pow(2, 3))
5. 数字常量属性
console.log(Number.MAX_VALUE); // 最大正数 (~1.79e+308)
console.log(Number.MIN_VALUE); // 最小正数 (~5e-324)
console.log(Number.MAX_SAFE_INTEGER); // 最大安全整数 (2^53 - 1)
console.log(Number.MIN_SAFE_INTEGER); // 最小安全整数 (-(2^53 - 1))
console.log(Number.POSITIVE_INFINITY); // +Infinity
console.log(Number.NEGATIVE_INFINITY); // -Infinity
console.log(Number.EPSILON); // 表示1与大于1的最小浮点数之差 (~2.22e-16)
6. 综合示例
// 数字处理实用函数
function formatFinancialNumber(value) {
// 1. 转换为数字
const num = Number(value);
// 2. 验证数字有效性
if (!Number.isFinite(num)) {
throw new Error('Invalid number');
}
// 3. 检查是否为安全整数
const isSafe = Number.isSafeInteger(num);
// 4. 根据数字大小选择合适的格式
let formatted;
if (Math.abs(num) >= 1_000_000) {
formatted = num.toExponential(2);
} else if (Math.abs(num) < 0.01 && num !== 0) {
formatted = num.toExponential(4);
} else {
// 确定小数位数
const decimalPlaces = num % 1 === 0 ? 0 :
Math.min(4, (num.toString().split('.')[1] || '').length);
formatted = num.toLocaleString(undefined, {
minimumFractionDigits: decimalPlaces,
maximumFractionDigits: decimalPlaces
});
}
return {
original: value,
number: num,
formatted,
isSafeInteger: isSafe,
isInteger: Number.isInteger(num),
isPositive: num > 0
};
}
// 测试用例
const testNumbers = [
'1234567890',
'0.000000123',
'123.456789',
'NaN',
'Infinity',
'-9876543.21'
];
testNumbers.forEach(value => {
try {
const result = formatFinancialNumber(value);
console.log(result);
} catch (error) {
console.error(`Error processing "${value}": ${error.message}`);
}
});
7. 数字验证最佳实践
-
验证数字有效性:
function isValidNumber(value) { return typeof value === 'number' && !Number.isNaN(value) && Number.isFinite(value); } -
安全数字比较:
function numbersEqual(a, b, epsilon = Number.EPSILON) { return Math.abs(a - b) < epsilon; } -
处理大数字:
const bigIntValue = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1); console.log(bigIntValue.toString()); // "9007199254740992"
这些方法可以组合使用来处理各种数字操作需求,如数据验证、格式化、转换等。
1237

被折叠的 条评论
为什么被折叠?



