`

Ruby中对数值运算的支持

阅读更多
测试和学习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
分享到:
评论

相关推荐

    ruby中文资源大全

    在工作中,他希望有一种比 Perl 强大,比 Python 更面向对象的语言。从1993年2月,他开始设计一个全新的自己的语言,1994年12月发布了第一个 alpha版本,并且将这种新语言定名为Ruby(红宝石)。 本教程内含多部中文...

    Ruby中文文档.zip

    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...

    Ruby中文帮助文档

    Ruby中文文档.CHM 方便ruby or rails学习.

    ruby中文教程,从基础到深入的让你学习ruby

    ruby中文教程,从基础到深入的让你学习ruby

    ruby中英文api

    ruby中英文api 适合于初学者。 希望能给大家带来一些帮助

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    Ruby中文教程及相关源代码

    Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码

    ruby 中文文档 必备资料

    ruby 中文文档 必备资料 一定要下哦

    Ruby中文文档

    Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...

    Ruby-HttpClient在Ruby中提供类似libwwwperlLWP的功能

    Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能

    ruby基础教程(中文第四版).epub

    本书支持最新的Ruby 2.0, 也附带讲解了可运行于1.9版本的代码, 事无巨细且通 俗易懂地讲解了编写程序时所需要的变量、 常量、 方法、 类、 流程控制等的语法, 以及主要类的使用方法和简单的应用, 让没有编程...

    ruby中文手册 chm

    ruby中文手册 chm 内容挺多的 包含: 1、Ruby用户指南 2、Ruby参考手册 3、RGSS入门教程 4、Programming Ruby的翻译

    ruby中文文档中心资料

    nb60_trans_old_zh_CN,ruby中文文档中心资料

    ruby教程(中文)

    ruby语言的简体中文教程

    实例解析Ruby中的数值类型以及常量

    数值类型(Number) 整型(Integer) 整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。 整数范围从 -230 到 230-1 或 -262 到 262-1。在这个范围内的整数是类 Fixnum 的对象,在这个...

    ruby教程中文第四版

    本书支持最新的Ruby 2.0,也附带讲解了可运行于1.9版本的代码,事无巨细且通俗易懂地讲解了编写程序时所需要的变量、常量、方法、类、流程控制等的语法,以及主要类的使用方法和简单的应用,让没有编程经验的读者也...

    Ruby-Ruby中机器学习的实用资源

    Ruby中机器学习的实用资源

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    Ruby-Watir在Ruby中Web应用程序测试

    Watir - 在Ruby中Web应用程序测试

    Ruby语言中英文教程.rar

    内含 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...

Global site tag (gtag.js) - Google Analytics