测试和学习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支持动态类型和运行时修改,这使得程序员可以在程序运行过程中改变其行为。 - **元编程能力**:Ruby允许程序员通过代码生成代码,这种能力极大地增强了语言的灵活性。 **1.4 Ruby与Python的比较*...
Ruby支持非整数指数运算,如2**(1/4)。 Ruby提供了丰富的算术运算符,包括基本的加(+)、减(-)、乘(*)、除(/)以及指数运算符(**)。例如,2**(1/4)将计算2的四分之一次方,16**(1/4.0)则会返回16的四次方根...
总之,Ruby的数值类和相关方法为处理各种数学运算提供了强大的支持,无论是简单的算术操作还是复杂的复数和有理数计算,都能得到妥善处理。同时,Ruby还提供了处理随机数和循环计数的便捷工具,以及处理浮点数误差的...
总而言之,Ruby-Money库是Ruby开发中的一个强大助手,它简化了货币处理的复杂性,提供了可靠和灵活的解决方案,使得开发者能够更加专注于业务逻辑,而不是底层的货币运算细节。无论是在财务应用、电子商务平台还是...
- **位运算符**:除了标准的算术运算符外,Ruby 还支持位运算,例如按位与 (`&`)、按位或 (`|`) 和按位异或 (`^`)。 - **打印输出**:`puts` 和 `print` 是常用的输出函数,前者会在输出后添加换行符,后者则不会。...
在Ruby中,一切皆为对象,即使是基本数据类型如整数和字符串。这种特性使得Ruby在处理面向对象编程时非常强大。类和模块是Ruby中的核心概念,它们提供了组织和复用代码的方式。类定义了对象的属性和行为,而模块则...
ObjectSpace模块提供了对当前Ruby进程中所有对象的信息访问。 **12.2 察看类和对象的状态** 可以使用各种方法来检查对象的状态和所属的类。 **12.3 动态方法调用** - **使用send方法:** 动态地调用方法。 - **...
Ruby中的数字类型支持常见的数学运算,如加减乘除等,并且可以进行比较操作。 - **整数(Integer)**:表示没有小数部分的数值,例如 `1`, `-42`。 - **浮点数(Float)**:表示带有小数部分的数值,例如 `3.14`, `-0....
- 在Ruby中,所有事物都是对象,包括数字、字符串等基本类型。 - **丰富的面向对象特性** - 支持类、继承、封装等面向对象的基本概念,并提供了一系列高级特性,如模块包含、混合使用等。 **4. 生态系统** - **...
从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、数值操作、条件语句、循环结构以及字符串处理等核心领域。 ### Ruby基础语法 #### 注释 Ruby提供了两种注释方式...
- **数值类型**:Ruby支持多种数值类型,如整数和浮点数。 ##### §4.4 String - **字符串定义**:使用单引号`''`或双引号`""`定义字符串。 - **示例**:`str = "Hello, World!"` ##### §4.5 Range - **范围定义*...
- **整数**:如 `42`,Ruby支持大整数运算。 - **浮点数**:如 `3.14`,用于表示带有小数部分的数值。 - **字符串**:使用双引号(`"..."`)或单引号(`'...'`)包围的文本序列。双引号内的字符串可以进行变量插值。 - ...
Ruby支持整数(Fixnum)和浮点数(Float)两种类型的数值。整数可以直接输入,如`1`和`100`,浮点数则表示带有小数部分的数值,如`3.1415`。每个数值都是一个特定类的对象,比如`Fixnum`和`Float`。 显示数值的方式与...
- 在命令行中输入`ruby`后跟脚本文件名即可运行Ruby脚本。 - **2.2.2 使用集成开发环境:** - FreeRIDE和SciTE是常用的Ruby IDE。 - 它们提供了代码高亮、自动补全等功能。 - **2.2.3 使用fxri:** - fxri是Ruby...
- **数据类型转换**:在本例中,通过`to_f`将输入转换为浮点数,可以支持小数运算。如果只需要整数运算,则可以改为使用`to_i`。 - **异常处理**:除了检查除数是否为零外,还可以添加更多的异常处理逻辑,比如验证...
- 动态性:Ruby是一种动态类型的解释型语言,支持面向对象编程。 - 易读性:设计初衷之一是提高程序员的生产力,使代码易于阅读和维护。 - 面向对象:几乎所有事物都被视为对象,包括数字和字符串。 - 扩展性和...
根据提供的文件内容,我们可以整理并深入探讨Ruby编程语言中的一些核心概念和技术要点: ### Ruby 数据类型及操作 #### 数字类型 - **Number**: 包括整数 (`int`) 和浮点数 (`float`)。 - 整数:用于表示没有小数...