【Dart语言第2篇】内置类型数字

数值类型

一、分类:

数值类型分为整型(int) 和浮点型(double)。可以用 intdoublenum 声明。

int

整数值:长度不超过 64 位,具体取值范围 依赖于不同的平台。在 DartVM 上其取值位于 -263 至 263 - 1 之间。在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。

double

64 位的双精度浮点数字:intdouble 都是 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 或正无穷大或负无穷大,则返回布尔值trueint、double
isInfinite如果数字不是NaN或正无穷大或负无穷大,则返回布尔值falseint、double
isNaN判断一个对象是否为非数字,是数字则返回false,否则返回trueint、double
isNegative如果数字是负数,则此属性返回布尔值trueint、double
sign如果数字小于零,则此属性返回-1
如果数字大于零,则返回1,如果数字等于零,则返回0
int、double
isEven如果数字是偶数,则此属性返回布尔值trueint
isOdd如果数字是奇数,则此属性返回布尔值trueint
bitLengthint 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), numn1 次幂,在对 n2 取模。

示例

print(3.modPow(2, 4)); // (3*3)%4 = 1

20、toRadixString() 方法

进制转换, 转化成参数对应进制的字符串表示。

示例

print(2.toRadixString(2)); // 10 
print(15.toRadixString(16)); // f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small_Axe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值