文章

num类型常用属性与方法

num类型常用属性与方法

num类型常用属性与方法

num类型常用属性与方法

数字类型属性文档

isNegative

🔍** isNegative → **bool

介绍: 判断数字是否为负数。
类似JS: Math.sign() 结合判断
示例:

1
2
3
4
5
int negative = -5;
double negativeDouble = -3.14;
print(negative.isNegative); // 输出: true
print(negativeDouble.isNegative); // 输出: true
print(5.isNegative); // 输出: false

JS示例:

1
2
3
4
5
let negative = -5;
let negativeDouble = -3.14;
console.log(Math.sign(negative) === -1); // 输出: true
console.log(Math.sign(negativeDouble) === -1); // 输出: true
console.log(Math.sign(5) === -1); // 输出: false

isFinite

🔍** isFinite → **bool

介绍: 判断数字是否为有限的(非无穷大)。
类似JS: Number.isFinite()
示例:

1
2
3
4
5
int normal = 42;
double infinite = double.infinity;
print(normal.isFinite); // 输出: true
print(infinite.isFinite); // 输出: false
print(double.nan.isFinite); // 输出: false

JS示例:

1
2
3
4
5
let normal = 42;
let infinite = Infinity;
console.log(Number.isFinite(normal)); // 输出: true
console.log(Number.isFinite(infinite)); // 输出: false
console.log(Number.isFinite(NaN)); // 输出: false

isInfinite

🔍** isInfinite → **bool

介绍: 判断数字是否为无穷大。
类似JS: !Number.isFinite() 结合判断
示例:

1
2
3
4
double infinite = double.infinity;
int normal = 100;
print(infinite.isInfinite); // 输出: true
print(normal.isInfinite); // 输出: false

JS示例:

1
2
3
4
let infinite = Infinity;
let normal = 100;
console.log(!Number.isFinite(infinite)); // 输出: true
console.log(!Number.isFinite(normal)); // 输出: false

isNaN

🔍** isNaN → **bool

介绍: 判断数字是否为”非数字”。
类似JS: Number.isNaN()
示例:

1
2
3
4
double nan = double.nan;
int normal = 50;
print(nan.isNaN); // 输出: true
print(normal.isNaN); // 输出: false

JS示例:

1
2
3
4
let nan = NaN;
let normal = 50;
console.log(Number.isNaN(nan)); // 输出: true
console.log(Number.isNaN(normal)); // 输出: false

sign

🔍** sign → **num

介绍: 返回数字的符号(-1.0, 0.0, 1.0)。
类似JS: Math.sign()
示例:

1
2
3
4
print((-10).sign); // 输出: -1.0
print(0.sign); // 输出: 0.0
print(15.sign); // 输出: 1.0
print((-3.14).sign); // 输出: -1.0

JS示例:

1
2
3
4
console.log(Math.sign(-10)); // 输出: -1
console.log(Math.sign(0)); // 输出: 0
console.log(Math.sign(15)); // 输出: 1
console.log(Math.sign(-3.14)); // 输出: -1

isEven

🔍** isEven → **bool

介绍: 判断整数是否为偶数(仅适用于 int 类型)。
类似JS: num % 2 === 0
示例:

1
2
3
print(4.isEven); // 输出: true
print(5.isEven); // 输出: false
print((-2).isEven); // 输出: true

JS示例:

1
2
3
console.log(4 % 2 === 0); // 输出: true
console.log(5 % 2 === 0); // 输出: false
console.log((-2) % 2 === 0); // 输出: true

isOdd

🔍** isOdd → **bool

介绍: 判断整数是否为奇数(仅适用于 int 类型)。
类似JS: num % 2 !== 0
示例:

1
2
3
print(3.isOdd); // 输出: true
print(4.isOdd); // 输出: false
print((-1).isOdd); // 输出: true

JS示例:

1
2
3
console.log(3 % 2 !== 0); // 输出: true
console.log(4 % 2 !== 0); // 输出: false
console.log((-1) % 2 !== 0); // 输出: true

数字类型方法文档

abs

📐** abs() → **num

介绍: 返回数字的绝对值。
类似JS: Math.abs()
示例:

1
2
3
4
print((-5).abs()); // 输出: 5
print(5.abs()); // 输出: 5
print((-3.14).abs()); // 输出: 3.14
print(0.abs()); // 输出: 0

JS示例:

1
2
3
4
console.log(Math.abs(-5)); // 输出: 5
console.log(Math.abs(5)); // 输出: 5
console.log(Math.abs(-3.14)); // 输出: 3.14
console.log(Math.abs(0)); // 输出: 0

round

🔢** round() → **int

介绍: 返回最接近的整数(四舍五入)。
类似JS: Math.round()
示例:

1
2
3
4
5
print(3.2.round()); // 输出: 3
print(3.5.round()); // 输出: 4
print(3.8.round()); // 输出: 4
print((-2.3).round()); // 输出: -2
print((-2.7).round()); // 输出: -3

JS示例:

1
2
3
4
5
console.log(Math.round(3.2)); // 输出: 3
console.log(Math.round(3.5)); // 输出: 4
console.log(Math.round(3.8)); // 输出: 4
console.log(Math.round(-2.3)); // 输出: -2
console.log(Math.round(-2.7)); // 输出: -3

floor

🔢** floor() → **int

介绍: 返回不大于当前数字的最大整数(向下取整)。
类似JS: Math.floor()
示例:

1
2
3
4
print(3.2.floor()); // 输出: 3
print(3.8.floor()); // 输出: 3
print((-2.3).floor()); // 输出: -3
print((-2.7).floor()); // 输出: -3

JS示例:

1
2
3
4
console.log(Math.floor(3.2)); // 输出: 3
console.log(Math.floor(3.8)); // 输出: 3
console.log(Math.floor(-2.3)); // 输出: -3
console.log(Math.floor(-2.7)); // 输出: -3

ceil

🔢** ceil() → **int

介绍: 返回不小于当前数字的最小整数(向上取整)。
类似JS: Math.ceil()
示例:

1
2
3
4
print(3.2.ceil()); // 输出: 4
print(3.8.ceil()); // 输出: 4
print((-2.3).ceil()); // 输出: -2
print((-2.7).ceil()); // 输出: -2

JS示例:

1
2
3
4
console.log(Math.ceil(3.2)); // 输出: 4
console.log(Math.ceil(3.8)); // 输出: 4
console.log(Math.ceil(-2.3)); // 输出: -2
console.log(Math.ceil(-2.7)); // 输出: -2

truncate

🔢** truncate() → **int

介绍: 返回整数部分(直接丢弃小数部分)。
类似JS: Math.trunc()
示例:

1
2
3
4
print(3.2.truncate()); // 输出: 3
print(3.8.truncate()); // 输出: 3
print((-2.3).truncate()); // 输出: -2
print((-2.7).truncate()); // 输出: -2

JS示例:

1
2
3
4
console.log(Math.trunc(3.2)); // 输出: 3
console.log(Math.trunc(3.8)); // 输出: 3
console.log(Math.trunc(-2.3)); // 输出: -2
console.log(Math.trunc(-2.7)); // 输出: -2

toInt

🔄** toInt() → **int

介绍: 将数字转换为整数(直接舍弃小数部分)。
类似JS: Math.trunc()parseInt()
示例:

1
2
3
print(3.14.toInt()); // 输出: 3
print(3.99.toInt()); // 输出: 3
print((-2.7).toInt()); // 输出: -2

JS示例:

1
2
3
4
5
console.log(Math.trunc(3.14)); // 输出: 3
console.log(Math.trunc(3.99)); // 输出: 3
console.log(Math.trunc(-2.7)); // 输出: -2
// 或使用 parseInt
console.log(parseInt(3.14)); // 输出: 3

toDouble

🔄** toDouble() → **double

介绍: 将数字转换为双精度浮点数。
类似JS: Number()parseFloat()
示例:

1
2
3
print(7.toDouble()); // 输出: 7.0
print(3.toDouble()); // 输出: 3.0
print((-5).toDouble()); // 输出: -5.0

JS示例:

1
2
3
4
5
console.log(Number(7)); // 输出: 7
console.log(Number(3)); // 输出: 3
console.log(Number(-5)); // 输出: -5
// 或使用 parseFloat
console.log(parseFloat(7)); // 输出: 7

toString

🔤** toString() → **String

介绍: 返回数字的字符串表示。
类似JS: Number.prototype.toString()
示例:

1
2
3
print(123.toString()); // 输出: "123"
print(3.14.toString()); // 输出: "3.14"
print((-5).toString()); // 输出: "-5"

JS示例:

1
2
3
console.log(123.toString()); // 输出: "123"
console.log(3.14.toString()); // 输出: "3.14"
console.log((-5).toString()); // 输出: "-5"

toStringAsFixed

🔤** toStringAsFixed(int fractionDigits) → **String

介绍: 将数字转换为字符串,保留指定小数位数。
类似JS: Number.prototype.toFixed()
示例:

1
2
3
4
print(3.14159.toStringAsFixed(2)); // 输出: "3.14"
print(3.14159.toStringAsFixed(4)); // 输出: "3.1416"(四舍五入)
print(12.34.toStringAsFixed(1)); // 输出: "12.3"
print(12.35.toStringAsFixed(1)); // 输出: "12.4"(四舍五入)

JS示例:

1
2
3
4
console.log(3.14159.toFixed(2)); // 输出: "3.14"
console.log(3.14159.toFixed(4)); // 输出: "3.1416"
console.log(12.34.toFixed(1)); // 输出: "12.3"
console.log(12.35.toFixed(1)); // 输出: "12.4"

toStringAsExponential

🔤** toStringAsExponential([int? fractionDigits]) → **String

介绍: 将数字转换为科学计数法表示的字符串。
类似JS: Number.prototype.toExponential()
示例:

1
2
3
print(1234.toStringAsExponential()); // 输出: "1.234e+3"
print(1234.toStringAsExponential(2)); // 输出: "1.23e+3"
print(0.00123.toStringAsExponential(3)); // 输出: "1.230e-3"

JS示例:

1
2
3
console.log(1234.toExponential()); // 输出: "1.234e+3"
console.log(1234.toExponential(2)); // 输出: "1.23e+3"
console.log(0.00123.toExponential(3)); // 输出: "1.230e-3"

toStringAsPrecision

🔤** toStringAsPrecision(int precision) → **String

介绍: 将数字转换为字符串,并精确到指定有效数字位数。
类似JS: Number.prototype.toPrecision()
示例:

1
2
3
print(3.14159.toStringAsPrecision(3)); // 输出: "3.14"
print(123.456.toStringAsPrecision(4)); // 输出: "123.5"
print(123.456.toStringAsPrecision(2)); // 输出: "1.2e+2"

JS示例:

1
2
3
console.log(3.14159.toPrecision(3)); // 输出: "3.14"
console.log(123.456.toPrecision(4)); // 输出: "123.5"
console.log(123.456.toPrecision(2)); // 输出: "1.2e+2"

remainder

🧮** remainder(num other) → **num

介绍: 计算此数除以 other 后的余数。
类似JS: % 运算符
示例:

1
2
3
4
print(5.remainder(3)); // 输出: 2
print(10.remainder(4)); // 输出: 2
print(7.5.remainder(2)); // 输出: 1.5
print((-5).remainder(3)); // 输出: -2

JS示例:

1
2
3
4
console.log(5 % 3); // 输出: 2
console.log(10 % 4); // 输出: 2
console.log(7.5 % 2); // 输出: 1.5
console.log((-5) % 3); // 输出: -2

compareTo

📊** compareTo(num other) → **int

介绍: 比较两个数字的大小。
类似JS: 直接比较或 Number.prototype.localeCompare()
示例:

1
2
3
4
print(5.compareTo(3)); // 输出: 1(大于)
print(3.compareTo(5)); // 输出: -1(小于)
print(5.compareTo(5)); // 输出: 0(等于)
print(3.14.compareTo(3.0)); // 输出: 1(大于)

JS示例:

1
2
3
4
console.log(5 > 3 ? 1 : (5 < 3 ? -1 : 0)); // 输出: 1
console.log(3 > 5 ? 1 : (3 < 5 ? -1 : 0)); // 输出: -1
console.log(5 > 5 ? 1 : (5 < 5 ? -1 : 0)); // 输出: 0
console.log(3.14 > 3.0 ? 1 : (3.14 < 3.0 ? -1 : 0)); // 输出: 1

clamp

📏** clamp(num lowerLimit, num upperLimit) → **num

介绍: 将数值限制在指定范围内。
类似JS: 需要手动实现
示例:

1
2
3
4
print(15.clamp(5, 10)); // 输出: 10
print(3.clamp(5, 10)); // 输出: 5
print(7.clamp(5, 10)); // 输出: 7
print((-5).clamp(0, 100)); // 输出: 0

JS示例:

1
2
3
4
5
6
7
function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}
console.log(clamp(15, 5, 10)); // 输出: 10
console.log(clamp(3, 5, 10)); // 输出: 5
console.log(clamp(7, 5, 10)); // 输出: 7
console.log(clamp(-5, 0, 100)); // 输出: 0

补充说明

注意事项

  1. 类型区分: intdouble 都继承自 num,但各自有特定的方法和属性
  2. 精度问题: 浮点数计算可能存在精度问题,需要特别注意
  3. 类型安全: Dart 是强类型语言,数字类型转换需要显式进行

常用开发场景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 1. 数字验证和转换
bool isValidNumber(String input) {
  return num.tryParse(input) != null;
}

double? parseNumber(String input) {
  return num.tryParse(input)?.toDouble();
}

// 2. 数字格式化
String formatCurrency(double amount) {
  return '\$${amount.toStringAsFixed(2)}';
}

String formatPercentage(double value) {
  return '${(value * 100).toStringAsFixed(1)}%';
}

// 3. 数值范围处理
int ensureInRange(int value, int min, int max) {
  return value.clamp(min, max);
}

// 4. 数学计算
double calculateAverage(List<int> numbers) {
  if (numbers.isEmpty) return 0;
  return numbers.reduce((a, b) => a + b) / numbers.length;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// JavaScript 对应示例
// 1. 数字验证和转换
function isValidNumber(input) {
  return !isNaN(parseFloat(input)) && isFinite(input);
}

function parseNumber(input) {
  return parseFloat(input);
}

// 2. 数字格式化
function formatCurrency(amount) {
  return `\$${amount.toFixed(2)}`;
}

function formatPercentage(value) {
  return `${(value * 100).toFixed(1)}%`;
}

// 3. 数值范围处理
function ensureInRange(value, min, max) {
  return Math.min(Math.max(value, min), max);
}

// 4. 数学计算
function calculateAverage(numbers) {
  if (numbers.length === 0) return 0;
  return numbers.reduce((a, b) => a + b) / numbers.length;
}

这份文档涵盖了 Dart 数字类型的主要属性和方法,按照从易到难的顺序排列,提供了完整的类型信息和实际开发示例,同时给出了对应的 JavaScript 示例,帮助开发者更好地理解和使用数字操作。

本文由作者按照 CC BY 4.0 进行授权