测试和学习Ruby中Numeric的通用方法。主要测试:Integer 和 Float
Q:ruby中是如何实现对numbers的支持的呢?
A:在ruby中“Everything is an Object”,ruby内置了一些Classes 实现了numbers。
在ruby中不需要明确的指定类型,ruby自动管理。
int_num = 9999
puts "int_num = 9999 => int_num.class: #{int_num.class}" # Fixnum
float_num = 9999.9
puts "float_num = 9999.9 => float_num.class: #{float_num.class}" #Float
int_num = 9999 * 999999999999
puts "int_num = 9999 * 9999999999 => int_num.class: #{int_num.class}" #Bignum
test_num = int_num * float_num
puts "test_num = int_num * float_num => test_num.class : #{test_num.class}" #Float
#Numeric
#abs
puts "(-5).abs: #{(-5).abs} " #5
#abs2
puts "(-5).abs2: #{(-5).abs2}" #25
#ceil (returnValue >= num)
puts "(5.3).ceil: #{(5.3).ceil}" #6
puts "(5).ceil: #{(5).ceil}" #5
puts "(-5.3).ceil: #{(-5.3).ceil}" # -5
#floor (returnValue <= num)
puts "(5.3).floor: #{(5.3).floor}" #5
puts "(5).floor: #{(5).floor}" #5
puts "(-5.3).floor: #{(-5.3).floor}" # -6
#coerce(numeric) -> Array
puts "5.coerce(5.5) => #{5.coerce(5.5)}" #[5.5,5.0] ==> [param, receiver]
puts "5.5.coerce(5) => #{5.5.coerce(5)}" #[5.0, 5.5]
puts "6.coerce(3) => #{6.coerce(3)}" #[3, 6]
#延伸问题:ruby中的数值之间的转换是如何做到呢?
#div /
puts "5 / 2 => #{5 / 2}" # 2
puts "5 div 2 => #{5.div 2}" # 2
puts "5.0 / 2 => #{5.0 / 2}" # 2.5
puts "-5.0 / 2 => #{-5.0 / 2}" # -2.5
puts "5.0 / -2 => #{5.0 / -2}" # -2.5
puts "-5.0 / -2 => #{5.0 / 2}" # 2.5
#fdiv
puts "5.fdiv 2 => #{5.fdiv 2}" #2.5
puts "-5.fdiv 2 => #{-5.fdiv 2}" # -2.5
puts "5.0.fdiv 2 => #{5.0.fdiv 2}" # 2.5
puts "10.fdiv 3 => #{10.fdiv 3}" #3.3333333333333335
#integer?
puts "5.integer? =>#{5.integer?}" # true
puts "5.0.integer? => #{5.0.integer?}" #false
#nonzero?
puts "5.nonzero? => #{5.nonzero?}" #5
puts "0.nonzero? => #{0.nonzero?}" #nil
#zero?
puts "zero?"
puts "1.zero? => #{1.zero?}" #false
puts "0.zero? => #{0.zero?}" #true
#quo
puts "5.quo 2 => #{5.quo 2}" #5/2
puts "2.quo 5 => #{2.quo 5}" #2/5
#divmod
puts "divmod:"
puts "5.divmod 2 => #{5.divmod 2}" #[2, 1]
puts "5.0.divmod 2 => #{5.0.divmod 2 }" # [2, 1.0]
puts "-5.0.divmod 2 => #{-5.0.divmod 2 }" # [-3, 1.0]
puts "5.0.divmod -2 => #{5.0.divmod -2 }" # [-3, -1.0]
puts "-5.0.divmod -2 => #{-5.0.divmod -2 }" # [-2, -1.0]
#modulo
puts "modulo:"
puts "5.modulo 2 => #{5.modulo 2}" # 1
puts "5.modulo 2.0 => #{5.modulo 2.0}" # 1.0
puts "5.0.modulo 2 => #{5.0.modulo 2}" # 1.0
puts "5.0.modulo 2.0 => #{5.0.modulo 2.0}" # 1.0
puts "5.modulo -2 => #{5.modulo -2}" # -1
puts "-5.modulo 2 => #{-5.modulo 2}" # 1
puts "-5.modulo -2 => #{-5.modulo -2}" # -1
#remainder
puts "remainder:"
puts "5.remainder 2 => #{5.remainder 2}" #1
puts "-5.remainder 2 => #{-5.remainder 2}" #-1
puts "5.remainder -2 => #{5.remainder -2}" #1
puts "-5.remainder -2 => #{-5.remainder -2}" #-1
#step => num.step(end_num, step){|i| block} -> num
puts "step:"
1.step(10,2){|i| print i, " "} #1 3 5 7 9
1.step(-10,-2){|i| print i, " "}#-1 -3 -5 -7 -9
# encoding: utf-8
#Integer
#even?
puts "Fixnum = > even?"
puts "3.even? => #{3.even?}" #false
puts "0.even? => #{0.even?}" #true
puts "4.even? => #{4.even?}" #true
puts "-4.even? => #{-4.even?}" # true
#odd?
puts "Fixnum = > odd?"
puts "3.odd? => #{3.odd?}" #true
puts "0.odd? => #{0.odd?}" #false
puts "4.odd? => #{4.odd?}" #false
puts "-3.odd? => #{-4.odd?}" # false
#size
puts "(fix.size -> int) Returns the number of bytes in the machine representation of a Fixnum."
puts "0.size => #{0.size}" #4
puts "9999.size => #{9999.size}" #4
#succ
puts "fix.succ->int succ = succ + 1"
puts "5.succ = > #{5.succ}" #6
#to_f
puts "to_f"
puts "5.to_f = > #{5.to_f}" #5.0
#to_s
puts "to_s base 2-36"
puts "35.to_s => #{35.to_s}" #35 默認10進制
puts "35.to_s(2) => #{35.to_s(2)}" #100011 二進制
puts "35.to_s(8) => #{35.to_s(8)}" #43 八進制
puts "35.to_s(10) => #{35.to_s(10)}" #35
puts "35.to_s(16) => #{35.to_s(16)}" #23
#float
puts "float"
puts "Float::MIN => #{Float::MIN}" #當前系統所支持的最小雙精度的浮點數
puts "Float::MAX => #{Float::MAX}" #當前系統所支持的最大雙精度的浮點數
#finite? flt.finite? -> true or false
puts "1.0.finite? => #{1.0.finite?}" #true
puts "(1.0/0).finite? => #{(1.0/0).finite?}" #false
#flt.infinite? -> nil or -1 or 1
puts "infinite?"
puts "1.0.infinite? => #{(1.0).infinite?}" #
puts "(1.0/0).infinite? => #{(1.0 / 0).infinite?}" #1
puts "(-1.0 / 0).infinite? = > #{(-1.0 / 0).infinite?}" #-1
#flt.nan? -> true or flase
#Returns true if flt is an invalid IEEE floating-point number
puts "nan?"
puts "1.0.nan? => #{(1.0).nan?}" #false
puts "0.0.nan? => #{0.0.nan?}" #false
puts "(1.0 / 0.0).nan? => #{(1.0 / 0.0).nan?}" # false (1.0 / 0.0) => Infinity ()
puts "(0.0/0.0).nan? => #{(0.0 / 0.0).nan?}" #true (0.0 / 0.0)=>NaN
#round
puts "round"
puts "1.5.round = > #{1.5.round}" #2
puts "1.4.round = > #{1.4.round}" #1
puts "1.45.round => #{1.45.round}" #1
puts "1.445.round(2) => #{1.445.round(2)}" #1.45
puts "1.4445.round(2)=> #{1.4445.round(2)}" #1.44
#to_i, to_int, truncate
puts "to_i, to_int"
puts "1.9.to_i => #{1.9.to_i}" #1
puts "1.1.to_int => #{1.1.to_int}" #1
puts "1.9.truncate => #{1.9.truncate}" #1
分享到:
相关推荐
在工作中,他希望有一种比 Perl 强大,比 Python 更面向对象的语言。从1993年2月,他开始设计一个全新的自己的语言,1994年12月发布了第一个 alpha版本,并且将这种新语言定名为Ruby(红宝石)。 本教程内含多部中文...
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...
Ruby中文文档.CHM 方便ruby or rails学习.
ruby中文教程,从基础到深入的让你学习ruby
ruby中英文api 适合于初学者。 希望能给大家带来一些帮助
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码
ruby 中文文档 必备资料 一定要下哦
Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...
Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能
本书支持最新的Ruby 2.0, 也附带讲解了可运行于1.9版本的代码, 事无巨细且通 俗易懂地讲解了编写程序时所需要的变量、 常量、 方法、 类、 流程控制等的语法, 以及主要类的使用方法和简单的应用, 让没有编程...
ruby中文手册 chm 内容挺多的 包含: 1、Ruby用户指南 2、Ruby参考手册 3、RGSS入门教程 4、Programming Ruby的翻译
nb60_trans_old_zh_CN,ruby中文文档中心资料
ruby语言的简体中文教程
数值类型(Number) 整型(Integer) 整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。 整数范围从 -230 到 230-1 或 -262 到 262-1。在这个范围内的整数是类 Fixnum 的对象,在这个...
本书支持最新的Ruby 2.0,也附带讲解了可运行于1.9版本的代码,事无巨细且通俗易懂地讲解了编写程序时所需要的变量、常量、方法、类、流程控制等的语法,以及主要类的使用方法和简单的应用,让没有编程经验的读者也...
Ruby中机器学习的实用资源
ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby
Watir - 在Ruby中Web应用程序测试
内含 12 本 Ruby 语言中英文教程资源,本资源下载后解压缩将得到以下图书: Programming Ruby 2nd.pdf Agile Web Development with Rails 2nd ed.pdf Agile Web Development with Rails.pdf Best.of.Ruby.Quiz.pdf O...