首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

娃子鸭学Ruby-10、数字

2012-12-18 
娃娃鸭学Ruby-10、数字Ruby中所有的值都是对象。继承关系Numeric|________________________|_______________

娃娃鸭学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采用十进制,速度慢


热点排行