数字类型

TypeScript 中的数字类型用于表示整数和浮点数,与 JavaScript 一样,所有数字都是浮点数。

基本用法

let integer: number = 10
let float: number = 3.14
let negative: number = -5

console.log(integer)   // 10
console.log(float)     // 3.14
console.log(negative)  // -5

进制表示

TypeScript 支持多种进制:

let decimal: number = 10       // 十进制
let hex: number = 0xa          // 十六进制
let binary: number = 0b1010    // 二进制
let octal: number = 0o12       // 八进制

console.log(decimal)  // 10
console.log(hex)      // 10
console.log(binary)   // 10
console.log(octal)    // 10

科学计数法

let big: number = 1e6      // 1000000
let small: number = 1e-3   // 0.001

console.log(big)    // 1000000
console.log(small)  // 0.001

特殊值

NaN

let notANumber: number = NaN

console.log(NaN === NaN)  // false
console.log(Number.isNaN(NaN))  // true

Infinity

let infinite: number = Infinity
let negativeInfinite: number = -Infinity

console.log(1 / 0)   // Infinity
console.log(-1 / 0)  // -Infinity

类型推断

let age = 25           // 推断为 number
let price = 99.99      // 推断为 number
let count = 0xFF       // 推断为 number

数学运算

let a: number = 10
let b: number = 3

console.log(a + b)   // 13 - 加法
console.log(a - b)   // 7  - 减法
console.log(a * b)   // 30 - 乘法
console.log(a / b)   // 3.333... - 除法
console.log(a % b)   // 1  - 取余
console.log(a ** b)  // 1000 - 幂运算

数学方法

let value: number = 3.7

console.log(Math.floor(value))   // 3  - 向下取整
console.log(Math.ceil(value))    // 4  - 向上取整
console.log(Math.round(value))   // 4  - 四舍五入
console.log(Math.trunc(value))   // 3  - 截断小数

console.log(Math.abs(-5))        // 5  - 绝对值
console.log(Math.max(1, 2, 3))   // 3  - 最大值
console.log(Math.min(1, 2, 3))   // 1  - 最小值

console.log(Math.random())       // 0-1 随机数
console.log(Math.sqrt(16))       // 4  - 平方根

实际应用

价格计算

interface Product {
  name: string
  price: number
  quantity: number
}

function calculateTotal(products: Product[]): number {
  return products.reduce((total, item) => {
    return total + item.price * item.quantity
  }, 0)
}

const cart: Product[] = [
  { name: "苹果", price: 5.5, quantity: 2 },
  { name: "香蕉", price: 3.0, quantity: 3 }
]

console.log(calculateTotal(cart))  // 20

范围限制

function clamp(value: number, min: number, max: number): number {
  return Math.min(Math.max(value, min), max)
}

console.log(clamp(5, 0, 10))   // 5
console.log(clamp(-5, 0, 10))  // 0
console.log(clamp(15, 0, 10))  // 10

随机数生成

function randomInt(min: number, max: number): number {
  return Math.floor(Math.random() * (max - min + 1)) + min
}

console.log(randomInt(1, 100))  // 1-100 随机整数

注意事项

浮点数精度

let result = 0.1 + 0.2
console.log(result)          // 0.30000000000000004
console.log(result === 0.3)  // false

// 解决方案:使用 toFixed
console.log(result.toFixed(2))  // "0.30"

安全整数范围

console.log(Number.MAX_SAFE_INTEGER)  // 9007199254740991
console.log(Number.MIN_SAFE_INTEGER)  // -9007199254740991

// 检查是否安全
console.log(Number.isSafeInteger(9007199254740991))  // true
console.log(Number.isSafeInteger(9007199254740992))  // false

不要与 Number 对象混淆

let correct: number = 10
let wrong: Number = new Number(10)  // 不推荐

类型转换

let str = "123"
let num = Number(str)      // 123
let parsed = parseInt(str) // 123
let float = parseFloat("3.14") // 3.14

let backToString = num.toString()  // "123"