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); //1print(b); //2print(c); //3.0print(d); //4print(e); //4.5print(1 is int); //trueprint(1 is num); //trueprint(1.1 is double); //trueprint(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.5a = 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.0print(double.parse('1.2')); //1.2// print(double.parse('1.a')); //报错// 整数和浮点数都可以转换(整数转换为整数、浮点数转换为浮点数)print(num.parse('1')); //1print(num.parse('1.1')); //1.1print(num.parse('1.a')); //报错
数字转换为字符串
// toStringprint(1.toString()); //1 整型转换为字符串类型。print(1.3.toString()); //1.3 双浮点型转换为字符串类型。//toStringAsFixed 指定小数点后的位数。print(1.toStringAsFixed(2)); //1.00print(1.14159.toStringAsFixed(2)); //1.14// is 判断是什么类型print(1.toString() is String); //trueprint(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)); //42print(66.toRadixString(2)); //1000010// 通过添加 radix 参数,指定整数的进制基数:print(int.parse('42')); //42print(int.parse('42', radix: 16)); //66print(int.parse('1000010', radix: 2)); //66
数字的运算
// 加减print(1 - 2); //-1print(1 + 2); //3// print(1 + '2'); //报错// 乘数print(1 * 2); //2// 除数print(1 / 2); //0.5print(1 / 0); //Infinity (无穷)print(0 / 0); //NaN (not a number)// 余数print(8 % 3); //2// 取整。直接抹去小数点后边的print(3 ~/ 2); //1print(-3 ~/ 2); //-1
其它运算参考 js-运算符。
数字的属性和方法
isNaN 是否为NaN
print(1.isNaN); //falseprint((0 / 0).isNaN); //true
isInfinite 是否为无穷
print(1.isInfinite); //falseprint((2 / 0).isInfinite); //true
isNegative 是否为负数
print(1.isNegative); //falseprint(0.isNegative); //falseprint((-0).isNegative); //falseprint((-1).isNegative); //true
isOdd、isEven 是否为奇、偶数
// 是否奇数print(1.isOdd); //trueprint(2.isOdd); //false// 是否偶数print(1.isEven); //falseprint(2.isEven); //true
数学方法
ceil、floor、round
// ceil 向上取整print(1.8.ceil()); //2print(1.1.ceil()); //2print(0.ceil()); //0print((-1.1).ceil()); //-1print((-1.8).ceil()); //-1// floor 向下取整print(1.8.floor()); //1print(1.1.floor()); //1print(0.floor()); //0print((-1.1).floor()); //-2print((-1.8).floor()); //-2// round 四舍五入print(1.8.round()); //2print(1.1.round()); //1print(0.round()); //0print((-1.1).round()); //-1print((-1.8).round()); //-2
abs 绝对值
print(1.abs()); //1print((-1).abs()); //1
truncate() 取整
去除一个数的小数部分,返回整数部分。
print(2.9.truncate()); //2print(2.1.truncate()); //2
更多详情, 参考 int, double, 和 num 的相关 API 文档。 也可参考 dart:math section。
clamp 范围限制
print(1.0.clamp(.8, 10.0)); //1.0print(0.3.clamp(.8, 10.0)); //0.8print(11.clamp(.8, 10.0)); //10.0
