Ruby中的数字类型

来源:互联网 发布:手机淘宝虚拟试衣在哪 编辑:程序博客网 时间:2024/04/28 06:26

3.1.1  整型

Ruby 支持整型和浮点型两种数字类型。

整型可以是任意长度(最大值由你机器的内存大小决定)。在内部由两个类来表示FixnumBignumFixnum的表数范围较Bignum小,大小超过Fixnum范围的整数由Bignum表示,如果两个Fixnum计算之后结果超出范围,则自动转换为Bignum;相反,如果两个Bignum操作结果很小,则会转换为FixnumRuby在两者之间自动转换,对用户来说是透明的。

 

num = 10

5.times do

  print num.class, " ", num, "/n"

  num *= num

end

 

#结果

Fixnum 10

Fixnum 100

Fixnum 10000

Fixnum 100000000

Bignum 10000000000000000

 

Fixnum有立即值(immediate value),就是说它们当参数传递时,是值传递,而不是引用传递。赋值语句不会在变量和对象之间建立引用关系。Bignum则不是这样的,不是立即值,属于引用传递。

这两个类共有的一些方法:

 

A.算术操作(加减乘除自不必说):

 

irb(main):053:0> 5/2  # 整数

=> 2

irb(main):054:0> 5%2   #取模 ,即余数

=> 1

irb(main):055:0> 2**4  #2的4次幂

=> 16

 

B.位操作:

   |

按位与

   &

按位或

^

按位异或

    >>

右移

    <<

左移

 

1的二进制为:00000001

2的二进制为:00000010

 

irb(main):056:0> 1&2

=> 0

irb(main):057:0> 1|2

=> 3

irb(main):058:0> 1^2

=> 3

irb(main):059:0> 1<<1

=> 2

irb(main):060:0> 2>>1

=> 1

irb(main):061:0>

 

 

C<=> 操作符

根据<=>两边的值比较大小的结果返回-1,0,1三个值之一:

 

irb(main):004:0> 5<=>9

=> -1

irb(main):005:0> 5<=>5

=> 0

irb(main):006:0> 5<=>2

=> 1

 

D[ ]  操作符

比如f是一个整数,则f[n]返回这个f的二进制格式的第n位的值,为0或者1

Esize:返回这个整数占用的字节数

 

irb(main):007:0> 1.size

=> 4

irb(main):008:0> 100000000.size

=> 4

irb(main):009:0> 1000000000000000000000000000.size

=> 12

 

Fto_f:返回这个整数的浮点值,其实就是加一个”.0”

   to_s:返回这个整数的字符串。

 

irb(main):010:0> 102.to_f

=> 102.0

irb(main):011:0> 102.to_s

=> "102"

irb(main):012:0>

 

 

 

同样,你也可以在数字前面使用进制标识符,比如0表示八进制,0x表示十六进制,0b表示二进制等。而且,如果一个整型数字中有一个下划线,这个下划线将被忽略。(但是下划线不能在开头或者结尾)

 

irb(main):061:0> 1_2*2

=> 24

irb(main):062:0>

 

Iteger

IntegerFixnumBignum的父类,有一些特殊的方法:

chr(integer):返回这个数字代表的ascii值。

downto(integer):接收一个block,进行从大到小的循环执行block

anInt.next:返回anInt的下一个数(即anInt+1)。

anInt.Step(endNum,step):从anInt循环到endNum,步长为step,而不是1

int.times {| i | block } 循环int次,每次执行block中的语句。

upto:类似downto

 

irb(main):014:0> 1.next

=> 2

irb(main):015:0> 65.chr

=> "A"

irb(main):016:0> 5.downto(2){|i| puts i}

5

4

3

2

=> 5

irb(main):017:0> 2.upto(5){|i| puts i}

2

3

4

5

=> 2

irb(main):018:0> 3.times {|i| puts i}

0

1

2

=> 3

irb(main):019:0>

 

 

 

3.1.2  浮点型

Ruby中浮点数只有Float类。除了算术加减乘除,还有一些特殊方法。以下以anFloat为消息接收者。

ceil     返回比anFloat大的最小的整数。

floor  :返回比anFloat小的最大整数。

finite? :如果anFloat是一个符合IEEE格式的浮点数,返回true。(这个方法名以问号结尾)。

infinite?:根据anFloat是否是负无穷,有限浮点数,正无穷,返回-1nil1

nan?  :如果anFloat不是一个符合IEEE标准的数,则返回true

round :对anFloat四舍五入到一个整数。

to_i   :返回anFloat截掉小数点后面数字的整数。

 

 

 

irb(main):026:0> (-2.9234).ceil

=> -2

irb(main):027:0> (2.9234).ceil

=> 3

irb(main):028:0> (2.9234).floor

=> 2

irb(main):029:0> (-2.9234).floor

=> -3

irb(main):030:0> (-2.9234).round

=> -3

irb(main):031:0> (2.9234).round

=> 3

irb(main):032:0> (2.9234).to_i

=> 2

irb(main):033:0> (-2.9234).to_i

=> -2

irb(main):034:0> a=-1.0

=> -1.0

irb(main):035:0> a.nan?

=> false

irb(main):040:0> (0.0).infinite?

=> nil

irb(main):041:0> (-1.0/0.0).infinite?

=> -1

irb(main):042:0> (+1.0/0.0).infinite?

=> 1

irb(main):043:0>

 

 

 

 

       注,本文为不更新版本。

        版权所有 (C) 〈2004 〉〈liubin AT huangpuzhuang DOT com〉

        本文档为自由文档,根据RDL(Ruby-cn Document License) v1.0许可证发布,你可以在网络上非赢利性传播(转载)这篇文档,但请保留原文档所有信息(包括本版权声明);其它使用方式请仔细阅读RDL许可证文档,该许可证的最新版本可在http://www.ruby-cn.org/RDL.txt获得。


 

原创粉丝点击