Dart 语言的 Number 有两种类型:
int
整数值不大于64位, 具体取决于平台。 在 Dart VM 上, 值的范围从 -2 到 2 - 1. Dart 被编译为 JavaScript 时,使用 JavaScript numbers, 值的范围从 -2 到 2 - 1.
double
64位(双精度)浮点数,依据 IEEE 754 标准。int
和 double
都是 num
的子类。 num
类型包括基本运算 +, -, /, 和 *, 以及 abs()
,ceil()
, 和 floor()
, 等函数方法。 (按位运算符,例如»,定义在 int 类中。) 如果 num
及其子类找不到你想要的方法, 尝试查找使用 dart:math 库。
声明
var a = 1;
int b = 2;
double c = 3;
num d = 4;
num e = 4.5;
print(a); //1
print(b); //2
print(c); //3.0
print(d); //4
print(e); //4.5
print(1 is int); //true
print(1 is num); //true
print(1.1 is double); //true
print(1.1 is num); //true
赋值的问题
int 不能再赋值成浮点数,但是浮点数可以赋值整数。
var a = 1;
a = 2; //可以
a = 2.5; //不可以
int a = 1;
a = 2; //可以
a = 2.5; //不可以
double a = 1;
a = 2.5; //可以 2.5
a = 2; //可以 2.0
//在Dart2.1之前,在double的上下文中使用int字面量是错误的。
//之后,必要的时候 int字面量会自转换成 double 类型。
字符串转成数字
// String -> int 只能转化整数为整数
print(int.parse('1')); //1
// print(int.parse('1.1')); //报错
// print(int.parse('a')); //报错
// String -> double 整数和浮点数都可以转换(只能转换为浮点数)
print(double.parse('1')); //1.0
print(double.parse('1.2')); //1.2
// print(double.parse('1.a')); //报错
// 整数和浮点数都可以转换(整数转换为整数、浮点数转换为浮点数)
print(num.parse('1')); //1
print(num.parse('1.1')); //1.1
print(num.parse('1.a')); //报错
数字转换为字符串
// toString
print(1.toString()); //1 整型转换为字符串类型。
print(1.3.toString()); //1.3 双浮点型转换为字符串类型。
//toStringAsFixed 指定小数点后的位数。
print(1.toStringAsFixed(2)); //1.00
print(1.14159.toStringAsFixed(2)); //1.14
// is 判断是什么类型
print(1.toString() is String); //true
print(1.3.toString() is String); //true
// 指定有效数字的位数。
assert(123.456.toStringAsPrecision(2) == '1.2e+2');
assert(double.parse('1.2e+2') == 120.0);
进制
// 10进制: 66;16进制: 42; 2进制: 1000010;
// toRadixString(n) 10进制转换为 n 进制
print(66.toRadixString(16)); //42
print(66.toRadixString(2)); //1000010
// 通过添加 radix 参数,指定整数的进制基数:
print(int.parse('42')); //42
print(int.parse('42', radix: 16)); //66
print(int.parse('1000010', radix: 2)); //66
数字的运算
// 加减
print(1 - 2); //-1
print(1 + 2); //3
// print(1 + '2'); //报错
// 乘数
print(1 * 2); //2
// 除数
print(1 / 2); //0.5
print(1 / 0); //Infinity (无穷)
print(0 / 0); //NaN (not a number)
// 余数
print(8 % 3); //2
// 取整。直接抹去小数点后边的
print(3 ~/ 2); //1
print(-3 ~/ 2); //-1
其它运算参考 js-运算符。
数字的属性和方法
isNaN 是否为NaN
print(1.isNaN); //false
print((0 / 0).isNaN); //true
isInfinite 是否为无穷
print(1.isInfinite); //false
print((2 / 0).isInfinite); //true
isNegative 是否为负数
print(1.isNegative); //false
print(0.isNegative); //false
print((-0).isNegative); //false
print((-1).isNegative); //true
isOdd、isEven 是否为奇、偶数
// 是否奇数
print(1.isOdd); //true
print(2.isOdd); //false
// 是否偶数
print(1.isEven); //false
print(2.isEven); //true
数学方法
ceil、floor、round
// ceil 向上取整
print(1.8.ceil()); //2
print(1.1.ceil()); //2
print(0.ceil()); //0
print((-1.1).ceil()); //-1
print((-1.8).ceil()); //-1
// floor 向下取整
print(1.8.floor()); //1
print(1.1.floor()); //1
print(0.floor()); //0
print((-1.1).floor()); //-2
print((-1.8).floor()); //-2
// round 四舍五入
print(1.8.round()); //2
print(1.1.round()); //1
print(0.round()); //0
print((-1.1).round()); //-1
print((-1.8).round()); //-2
abs 绝对值
print(1.abs()); //1
print((-1).abs()); //1
truncate() 取整
去除一个数的小数部分,返回整数部分。
print(2.9.truncate()); //2
print(2.1.truncate()); //2
更多详情, 参考 int, double, 和 num 的相关 API 文档。 也可参考 dart:math section。
clamp 范围限制
print(1.0.clamp(.8, 10.0)); //1.0
print(0.3.clamp(.8, 10.0)); //0.8
print(11.clamp(.8, 10.0)); //10.0