Ruby中的数字类型
2004-11-29 16:02
525 查看
3.1.1 整型
Ruby 支持整型和浮点型两种数字类型。整型可以是任意长度(最大值由你机器的内存大小决定)。在内部由两个类来表示Fixnum和Bignum,Fixnum的表数范围较Bignum小,大小超过Fixnum范围的整数由Bignum表示,如果两个Fixnum计算之后结果超出范围,则自动转换为Bignum;相反,如果两个Bignum操作结果很小,则会转换为Fixnum。Ruby在两者之间自动转换,对用户来说是透明的。
num = 10 5.times do print num.class, " ", num, "/n" num *= num end #结果 Fixnum 10 Fixnum 100 Fixnum 10000 Fixnum 100000000 Bignum 10000000000000000 |
这两个类共有的一些方法:
A.算术操作(加减乘除自不必说):
irb(main):053:0> 5/2 # 整数 => 2 irb(main):054:0> 5%2 #取模 ,即余数 => 1 irb(main):055:0> 2**4 #2的4次幂 => 16 |
| | 按位与 |
& | 按位或 |
^ | 按位异或 |
>> | 右移 |
<< | 左移 |
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> |
根据<=>两边的值比较大小的结果返回-1,0,1三个值之一:
irb(main):004:0> 5<=>9 => -1 irb(main):005:0> 5<=>5 => 0 irb(main):006:0> 5<=>2 => 1 |
比如f是一个整数,则f[n]返回这个f的二进制格式的第n位的值,为0或者1。
E.size:返回这个整数占用的字节数
irb(main):007:0> 1.size => 4 irb(main):008:0> 100000000.size => 4 irb(main):009:0> 1000000000000000000000000000.size => 12 |
to_s:返回这个整数的字符串。
irb(main):010:0> 102.to_f => 102.0 irb(main):011:0> 102.to_s => "102" irb(main):012:0> |
irb(main):061:0> 1_2*2 => 24 irb(main):062:0> |
类Integer是Fixnum和Bignum的父类,有一些特殊的方法:
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是否是负无穷,有限浮点数,正无穷,返回-1,nil,1。
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获得。
相关文章推荐
- wxRuby 0.6.0 发布
- Ruby和其它类似语言的比较
- [ANN] 纯Ruby Postgres 数据库接口postgres-pr 0.2.0发布
- [ 转载 ] 為什麼 Ruby
- Ruby中的IoC容器:needle
- Ruby IDE: RDE(Ruby Development Environment)
- Ruby语言家族树
- Ruby 周报2004/11/1--11/7
- 介绍一款Ruby IDE :Arachno Ruby IDE
- 使用Ruby DBI模块
- 使用Ruby的MySql模块(1)
- Ruby的作者和由来
- ruby语言是什么东西?
- Ruby中的模块
- Ruby和web开发
- Programming Ruby: The Pragmatic Programmer's Guide, Second Edition
- 初试Groovy
- 用Ruby下载一个网页上的所有图片
- 使用Ruby启动新线程并获取输出。
- [Ruby-talk]对Fixnum与的讨论