数值类型
一、分类:
数值类型分为整型(int) 和浮点型(double)。可以用 int
、double
、num
声明。
整数值:长度不超过 64 位,具体取值范围 依赖于不同的平台。在 DartVM 上其取值位于 -263 至 263 - 1 之间。在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。
64 位的双精度浮点数字:int
和 double
都是 num
的子类。num中定义了一些基本的运算符,比如 +、-、*、/等,还定义了abs()
,ceil()
、 floor()
等方法。如果 num 及其子类不满足你的要求,可以查看 dart:math 库中的API。
整数是不带小数点的数字,定义整数字面量:
var x = 1;
var hex = 0xDEADBEEF; // 16进制
如果一个数字包含了小数点,那么它就是浮点型,浮点型字面量定义:
var x = 1.1;
var exponents = 1.42e5;
我们还可以将变量声明为 num。如果这样做,变量可以同时具有整数和双精度值:
num x = 1; // x可以是int或者double
x += 2.5;
整形字面量会在必要的时候自动转化成浮点型字面量:
double z = 1; // 等价于 double z = 1.0;
**版本提示:**在 Dart 2.1 之前,在浮点数上下文中使用整数字面量是错误的。
二、转化
字符串和数字之间转换方式:
// String to int
var one = int.parse('1');
print(one == 1); // true
// String to double
var onePointone = double.parse('1.1');
print(onePointone == 1.1); // true
// int to String
var numOne = 1;
String strOne = numOne.toString();
print(strOne == '1'); // true
// double to String
var doubleNum = 3.1415926;
String strOne = doubleNum.toStringAsFixed(2);
print(strOne == '3.14'); // true
parse()函数
parse()
静态函数允许将字符串解析为数字型。例如:
print(num.parse('10')); // 10
print(num.parse('10.21')); // 10.21
三、属性
属性 | 描述 | 适用类型 |
---|---|---|
hascode | 返回数值的哈希码 | int、double |
isFinite | 如果数字不是NaN 或正无穷大或负无穷大,则返回布尔值true | int、double |
isInfinite | 如果数字不是NaN或正无穷大或负无穷大,则返回布尔值false | int、double |
isNaN | 判断一个对象是否为非数字,是数字则返回false ,否则返回true | int、double |
isNegative | 如果数字是负数,则此属性返回布尔值true | int、double |
sign | 如果数字小于零,则此属性返回-1 ,如果数字大于零,则返回 1 ,如果数字等于零,则返回0 | int、double |
isEven | 如果数字是偶数,则此属性返回布尔值true | int |
isOdd | 如果数字是奇数,则此属性返回布尔值true | int |
bitLength | int bitLength :返回存储此整数所需的最小位数 | int |
1、hashcode
属性
该属性返回一个整数,表示数值的哈希码。
语法:
number.hashcode
例如:
var No = 450;
print(No.hashCode); // 450
2、isFinite
属性
判断数字是否为有限数字,即如果数字不是NaN
或正无穷大或者负无穷大,则返回布尔值 true
。
语法:
number.isFinite
例如:
var No = 450;
print(No.isFinite); // true
3、isInfinite
属性
判断数字是否为无限数字,如果数字不是 NaN
或者正无穷大或负无穷大,则返回布尔值false
。
语法:
number.isInfinite
例如:
var No = 1 / 3;
print(No.isInfinite); // false
// 正无穷
var No = 1 / 0; // Infinity
print(No.isInfinite); // true
// 非数字
var No = 0 / 0; // NaN
print(No.isInfinite); // false
// 负无穷大
var No = -8 / 0; // -Infinity
print(No.isInfinite); // true
4、isNaN
属性
判断一个对象是否为非数字,是数字则返回 false
,否则返回 true
。
语法:
number.isNaN
例如:
var No = 0 / 0;
print(No); // NaN
print(No.isNaN); // true
5、isNegative
属性
判断数字是否为负数,如果是负数,则此属性返回布尔值true
。
语法:
number.isNegative
例如:
int No1 = 10;
int No2 = -10;
print(No1.isNegative); // false
print(No2.isNegative); // true
6、sign
属性
判断数字的符号,正数返回1,负数返回-1,0返回0。
语法:
number.sign
例如:
int No1 = 10;
int No2 = 0;
int No3 = -12;
print(No1.sign); // 1
print(No2.sign); // 0
print(No3.sign); // -1
double No1 = 10;
double No2 = 0;
double No3 = -12;
print(No1.sign); // 1.0
print(No2.sign); // 0.0
print(No3.sign); //-1.0
7、isEven
属性
判断数字是否为偶数,如果是偶数,则返回布尔值true
。
语法:
number.isEven
例如:
int posNum = 10;
print(posNum.isEven); // true
8、isOdd
属性
判断数字是否为奇数,如果数字是奇数,则此属性返回布尔值true
。
语法:
number.isOdd
例如:
int posNum = 10;
print(posNum.isOdd); // false
int No = 11;
print(No.isOdd); // true
9、bitLength
属性
返回存储此整数所需的位数。
语法:
number.bitLength
例如:
int posNum = 11;
print(posNum.bitLength); // 4
四、方法
方法 | 描述 | 适用类型 |
---|---|---|
abs() | 计算返回数字的绝对值 | int、double |
ceil() | 返回上限值,即大于或等于该数字的最小整数 | double |
ceilToDouble() | 返回上限值,即大于或等于该数字的最小整数转化为浮点类型 | double |
clamp(n1, n2) | 获得[n1,n2]区间距离当前变量最近的数字(n1 <= n2) | int、double |
compareTo(n) | 返回一个整数,表示两个数字之间的关系 | int、double |
floor() | 向下取整:返回小于或等于数字的最大整数 | double |
floorToDouble() | 向下取整返回最大整数浮点型,等同于floor().toDouble() | double |
remainder(n) | 当前变量与n取余后的结果 | int、double |
round() | 四舍五入 | double |
roundToDouble() | 四舍五入返回浮点型,等同于round().toDouble() | double |
toDouble() | 返回数字的 double 数值 | int |
toInt() | 返回数字值的整数表示形式 | double |
toString() | 返回数字值的字符串表示形式 | int、double |
toStringAsExponential() | 当前变量的*10n科学计数法的字符串表示 | int、double |
toStringAsFixed() | 保留指定的小数位数(四舍五入), 不足补0, 字符串返回 | int、double |
toStringAsPrecision() | 保留变量的位数(小数点前后的总位数), 不足补0, 多余的四舍五入 | int、double |
truncate() | 舍弃当前变量的小数部分 | double |
truncateToDouble() | 舍弃当前变量的小数部分,浮点数形式表示 | double |
gcd(int n) | 当前变量与n的最大公约数 | int |
modPow(int n1, int n2) | 当前变量的n1次幂后,与n2取模 | int |
toRadixString(int n) | 当前变量转换至n进制的字符串表示 | int |
1、abs()
方法
此属性用于返回数字的绝对值。
例如
var No = -2.5;
print(No.abs()); // 2.5
2、ceil()
方法
向上取整方法,即返回大于或等于该数字的最小整数。
例如
var No = 2.5;
print(No.ceil()); // 3
var No1 = -2.5;
print(No1.ceil()); // -2
3、ceilToDouble()
方法
向上取整输出double
类型,相当于 number.ceil().toDouble()
。
例如
var No = 2.5;
print(No.ceilToDouble()); // 3.0
print(No.ceil().toDouble()); // 3.0
// No.ceilToDouble() 等同于 No.ceil().toDouble()
4、clamp()
方法
语法
number.clamp( num lowerLimit, num upperLimit)
获得 [lowerLimit, upperLimit]
区间距离当前变量最近的数字(lowerLimit <= upperLimit)
例如
var No = 2.5;
print(No.clamp(1, 10)); // 2.5
print(No.clamp(3, 10)); // 3
5、compareTo(n)
方法
当前变量与n比较,根据比较结果返回-1,0,1
, 0
表示两个值相等, 1
表示当前数值大于 指定的比较对象 n
, -1
表示当前数字 小于 指定的比较对象 n
。
示例:
var No = 5.2;
print(No.compareTo(3)); // 1 (5.2 > 3)
print(No.compareTo(5.2)); // 0 (5.2 = 5.2)
print(No.compareTo(5.3)); // -1 (5.2 < 5.3)
6、floor()
方法
该方法表示向下取整,即返回小于或者等于该数字的最大整数。
示例
var No = 2.5;
print(No.floor()); // 2
var No1 = -2.5;
print(No1.floor()); // -3
7、floorToDouble()
方法
向下取整,并用浮点数形式表示,等同于 floor().toDouble()
示例
var No = 2.5;
print(No.floorToDouble()); // 2.0
var No1 = -2.5;
print(No1.floorToDouble()); // -3.0
8、remainder(n)
方法
取余,返回数字与参数n
的余数。
示例
var No = 5;
print(No.remainder(2)); // 1
print(No.remainder(3)); // 2
9、round()
方法
四舍五入,返回舍入到最接近整数的数字的值。
示例
var No = 4.5;
print(No.round()); // 5
10、roundToDouble()
方法
四舍五入返回浮点数。等同于round().toDouble()
示例
var No = 4.556;
print(No.roundToDouble()); // 5.0
print(No.round().toDouble()); // 5.0
11、toDouble()
方法
返回数字的double类型的数值。如果是整形,则在后面加0,比如 1
返回 1.0
。
var No = 4.556;
print(No.toDouble()); // 4.556;
var No = 4;
print(No.toDouble()); // 4.0
12、toInt()
方法
此方法返回数字值的整数部分。取整数, 小数点舍去。
示例
var No = 4.556;
print(No.toInt()); // 4
13、toString()
方法
转成字符串.
示例
const m3 = 24;
print(m3.toString()); // '24'
14、toStringAsExponential(int num)
方法
用科学技术法
( 把一个大于10的数表示成a×10n的形式, 0 < a < 10
) 表示。 如果有参数n,那么它必须满足一个0 <= n <=20
的整数,在这种情况下,字符串小数点后面正好包含n
位。如果没有参数,则返回的字符串将使用准确表示此数字的最短位数。
注意:转化成科学计数法的时候, a * 10n 形式的
a
会根据参数num
进行四舍五入保留对应位数,所以转化后数值可能会因为参数发生变化。
示例
print(100.toStringAsExponential()); // 1e+2
print(100.toStringAsExponential(2));// 1.00e+2
print(15.89.toStringAsExponential(2)); // 1.59e+1
print(123456.toStringAsExponential(3)); // 1.235e+5 =》 123500 != 123456
15、toStringAsFixed()
方法
返回当前变量的小数数量,参数为2就返回两位,不足补0。
四舍五入:采用银行家舍入法,并非我们数学中的四舍五入,其实就是四舍六入五取偶。(即五前为偶应舍去,五前为奇要进一)
示例
print(8.413.toStringAsFixed(2)); // 8.41
print(8.335.toStringAsFixed(2)); // 8.34(5前奇数进一位)
print(8.325.toStringAsFixed(2)); // 8.32 (5前偶数舍去)
16、toStringAsPrecision(int num)
方法
返回当前变量带有num
个数位的字符串表示:
示例
print(1234567.toStringAsPrecision(3)); // 1.23e+6
print(1234567.toStringAsPrecision(9)); // 1234567.00
17、truncate()
方法
舍弃当前double类型对象的小数点部分,返回整数部分。
示例
print(12.34567.truncate()); // 12
print(1234.567.truncate()); // 1234
18、truncateToDouble()
方法
舍弃当前变量的小数部分,浮点数形式表示, 等同于 truncate().toDouble()
:
示例
print(12.34567.truncateToDouble()); // 12.0
print(1234.567.truncateToDouble()); // 1234.0
print(1234.567.truncate().toDouble()); // 1234.0
18、gcb(int num)
方法
返回int对象与参数num的最大公约数。
示例
// 9 和 6 的最大公约数为3
print(9.gcd(6)); // 3
19、modPow()
方法
幂次求模modPow(int n1, int n2)
, num
的 n1
次幂,在对 n2
取模。
示例
print(3.modPow(2, 4)); // (3*3)%4 = 1
20、toRadixString()
方法
进制转换, 转化成参数对应进制的字符串表示。
示例
print(2.toRadixString(2)); // 10
print(15.toRadixString(16)); // f