娃娃鸭学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采用十进制,速度慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值