娃娃鸭学Ruby-10、数字
Ruby中所有的值都是对象。
继承关系
Numeric
|
________________________|__________________________________________________
| | | | |
Integer Float Complex BigDecimal Rational
| (standard library) (standard library) (standard library)
|
_____|_______
| |
Fixnum Bignum
数值的智能转换:
如果一个整数能容纳在31个二进制位里(大多如此),那么它是Fixnum类的实例,否则就是Bignum类的实例。
Bignum对象用于表示任意大小的整数,如果一个操作的操作数是Fixnum对象,但是其结果超出了Fixnum的范围,该结果将被透明地转换成一个Bignum对象。
类似的,如果一个操作的操作数是Bignum对象,但是其结果能够保存在Fixnum对象里,那么该结果将被透明的转换成一个Fixnum对象。
Ruby使用Float类来近似地表示实数,该类会利用本地平台的浮点数表示形式。
Complex,BigDecimal,Rational类并非Ruby的内建类,但是标准库的一部分与Ruby一同发布。
Complex复数
BigDecimal任意精度的实数
Rational有理数
所有的数值对象都是不可变的。
1、数字字面量
0
123
12345678901234567890
能容纳于Fixnum类则是Fixnum,否则它就是一个Bignum
千分符
不在开头也不在结尾的下划线
1_000_000_000
0开头后面还有数字 八进制
0x开头十六进制 后面a-f 或A-F
0b/0B开头为二进制
字面量前面加一个减号,表示负数,加加号表示正数
2011-3-30 21:26 danny
2、浮点数字面量
浮点数字面量就是一个可选的正号或负号后依次加上: 一个或多个十进制数字、一个小数点(字符)及其后的一个或多个十进制数字,以及一个或选的指数部分。指数部分由字母e或E开始,后接一个可选的正号或负号,然后接一个或多个十进制数字。
浮点数字面量里也可以使用下划线
浮点值的基数只能为10.
0.0
-3.14
6.02e23 #6.02 * 10^23
1_000_000.01
不能写.1 表示0.1
2011-3-31 16:11 danny
3、算术操作
所有的Ruby数值类型都定义了标准的+ - * / 操作。
/ 与操作类型有关。两整数 则截断型的整数除法 任一操作数是Float则执行浮点数除法
x=5/2 # x==2
y=5.0/2 #y==2.5
z=5/2.0 #z==2.5
除数为0的整数除法抛ZeroDivisionError
浮点数除尘不会导致错误,只会返回一个名为 Infinity的值
0.0/0.0 特例。
NaN Not-a-Number
取模操作符 %
x=5 %2 # x==1
x=1.5%0.4 #x=0.3 也可用在浮点数,有意思
注意
整数除法操作,取操作和负数注意
-7/3==--3 向负无穷大圆整
-7%3==-2
在Ruby中,-a/b==a/-b !=-(a/b)
----------------------------------------
** 操作
x**4 # x*x*x*x
x**-1 # 1/x
x**(1/3.0) # The cube root of x 开三次方
x**(1/4.0) #开四次方
多个**操作,按照从右到左的顺序计算,
4**3**2 == 4**9
不同于64**2
2011-3-31 16:26
4、浮点数的二进制表示和圆整错误
Float对象采用二进制,精度高,可以近似表示0.1但无法精确表示
BigDecimal采用十进制,速度慢