Dart 语言的 Number 有两种类型:

int
整数值不大于64位, 具体取决于平台。 在 Dart VM 上, 值的范围从 -2 到 2 - 1. Dart 被编译为 JavaScript 时,使用 JavaScript numbers, 值的范围从 -2 到 2 - 1.

double
64位(双精度)浮点数,依据 IEEE 754 标准。
intdouble 都是 num 的子类。 num 类型包括基本运算 +, -, /, 和 *, 以及 abs()ceil(), 和 floor(), 等函数方法。 (按位运算符,例如»,定义在 int 类中。) 如果 num 及其子类找不到你想要的方法, 尝试查找使用 dart:math 库。

声明

  1. var a = 1;
  2. int b = 2;
  3. double c = 3;
  4. num d = 4;
  5. num e = 4.5;
  6. print(a); //1
  7. print(b); //2
  8. print(c); //3.0
  9. print(d); //4
  10. print(e); //4.5
  11. print(1 is int); //true
  12. print(1 is num); //true
  13. print(1.1 is double); //true
  14. print(1.1 is num); //true

赋值的问题

int 不能再赋值成浮点数,但是浮点数可以赋值整数。

  1. var a = 1;
  2. a = 2; //可以
  3. a = 2.5; //不可以
  4. int a = 1;
  5. a = 2; //可以
  6. a = 2.5; //不可以
  7. double a = 1;
  8. a = 2.5; //可以 2.5
  9. a = 2; //可以 2.0
  10. //在Dart2.1之前,在double的上下文中使用int字面量是错误的。
  11. //之后,必要的时候 int字面量会自转换成 double 类型。

字符串转成数字

  1. // String -> int 只能转化整数为整数
  2. print(int.parse('1')); //1
  3. // print(int.parse('1.1')); //报错
  4. // print(int.parse('a')); //报错
  5. // String -> double 整数和浮点数都可以转换(只能转换为浮点数)
  6. print(double.parse('1')); //1.0
  7. print(double.parse('1.2')); //1.2
  8. // print(double.parse('1.a')); //报错
  9. // 整数和浮点数都可以转换(整数转换为整数、浮点数转换为浮点数)
  10. print(num.parse('1')); //1
  11. print(num.parse('1.1')); //1.1
  12. print(num.parse('1.a')); //报错

数字转换为字符串

  1. // toString
  2. print(1.toString()); //1 整型转换为字符串类型。
  3. print(1.3.toString()); //1.3 双浮点型转换为字符串类型。
  4. //toStringAsFixed 指定小数点后的位数。
  5. print(1.toStringAsFixed(2)); //1.00
  6. print(1.14159.toStringAsFixed(2)); //1.14
  7. // is 判断是什么类型
  8. print(1.toString() is String); //true
  9. print(1.3.toString() is String); //true
  10. // 指定有效数字的位数。
  11. assert(123.456.toStringAsPrecision(2) == '1.2e+2');
  12. assert(double.parse('1.2e+2') == 120.0);

进制

  1. // 10进制: 66;16进制: 42; 2进制: 1000010;
  2. // toRadixString(n) 10进制转换为 n 进制
  3. print(66.toRadixString(16)); //42
  4. print(66.toRadixString(2)); //1000010
  5. // 通过添加 radix 参数,指定整数的进制基数:
  6. print(int.parse('42')); //42
  7. print(int.parse('42', radix: 16)); //66
  8. print(int.parse('1000010', radix: 2)); //66

数字的运算

  1. // 加减
  2. print(1 - 2); //-1
  3. print(1 + 2); //3
  4. // print(1 + '2'); //报错
  5. // 乘数
  6. print(1 * 2); //2
  7. // 除数
  8. print(1 / 2); //0.5
  9. print(1 / 0); //Infinity (无穷)
  10. print(0 / 0); //NaN (not a number)
  11. // 余数
  12. print(8 % 3); //2
  13. // 取整。直接抹去小数点后边的
  14. print(3 ~/ 2); //1
  15. print(-3 ~/ 2); //-1

其它运算参考 js-运算符

数字的属性和方法

isNaN 是否为NaN

  1. print(1.isNaN); //false
  2. print((0 / 0).isNaN); //true

isInfinite 是否为无穷

  1. print(1.isInfinite); //false
  2. print((2 / 0).isInfinite); //true

isNegative 是否为负数

  1. print(1.isNegative); //false
  2. print(0.isNegative); //false
  3. print((-0).isNegative); //false
  4. print((-1).isNegative); //true

isOdd、isEven 是否为奇、偶数

  1. // 是否奇数
  2. print(1.isOdd); //true
  3. print(2.isOdd); //false
  4. // 是否偶数
  5. print(1.isEven); //false
  6. print(2.isEven); //true

数学方法

ceil、floor、round

  1. // ceil 向上取整
  2. print(1.8.ceil()); //2
  3. print(1.1.ceil()); //2
  4. print(0.ceil()); //0
  5. print((-1.1).ceil()); //-1
  6. print((-1.8).ceil()); //-1
  7. // floor 向下取整
  8. print(1.8.floor()); //1
  9. print(1.1.floor()); //1
  10. print(0.floor()); //0
  11. print((-1.1).floor()); //-2
  12. print((-1.8).floor()); //-2
  13. // round 四舍五入
  14. print(1.8.round()); //2
  15. print(1.1.round()); //1
  16. print(0.round()); //0
  17. print((-1.1).round()); //-1
  18. print((-1.8).round()); //-2

abs 绝对值

  1. print(1.abs()); //1
  2. print((-1).abs()); //1

truncate() 取整

去除一个数的小数部分,返回整数部分。

  1. print(2.9.truncate()); //2
  2. print(2.1.truncate()); //2

更多详情, 参考 int, double,num 的相关 API 文档。 也可参考 dart:math section

clamp 范围限制

  1. print(1.0.clamp(.8, 10.0)); //1.0
  2. print(0.3.clamp(.8, 10.0)); //0.8
  3. print(11.clamp(.8, 10.0)); //10.0