论坛首页 编程语言技术论坛

Ruby用于日常计算的两个有用的配置

浏览 3455 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (9) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-21   最后修改:2010-01-21

很多刚开始接触脚本语言的人估计都会对整数除法有点不习惯,比如

9/2 =》 4 

 

反正我是觉得不太方便,特别是自己有时候用ruby来计算一点东西,经常就忘记在定义的整数后面加上一个to_f方法。

 

ruby中其实有一个类库可以用来解决这个问题,mathn. 如果你载入了这个库之后,

 

9/2 就会输出 9/2 而不是浮点数。一般来说,用这个解决方法就够用了,但是昨天我写的一个程序用来计算一个稍微复杂一点的数的时候,莫名其妙的给我一个错误,我估计原因应该是因为我的算式里面有指数这样的无理数,mathn还硬要算出一个有理数来,结果溢出了。

 

幸好ruby语言比较灵活,我给ruby的类库重载了一下就可以实现我要的功能。

 

class Float
    def to_s
        format("%.3f", self)
    end
end

class Fixnum
    def / (num)
        self.to_f/num.to_f
    end
end

 

一个是用来给浮点输出格式化一下,后面的就是让整数除法自动的转成浮点数以后再除。简单把,呵呵!

 

irb(main):008:0> 7/3

=> 2.333

irb(main):009:0> 8/2

=> 4.000

 

如果在程序里面想用原来的整数除法,可以用div函数。


   发表时间:2010-01-25  
恩,ruby就是让人hack的
0 请登录后投票
   发表时间:2010-01-26  
二楼不要说怪话。
0 请登录后投票
   发表时间:2010-01-26  
7.0/2
0 请登录后投票
   发表时间:2010-01-26  
liusong1111 写道
7.0/2

对,应该这么做
0 请登录后投票
   发表时间:2010-01-26  
我当然知道是可以用
7.0/2
这样的方式来算这样的简单演示。

但是在你写程序来算一点东西的时候,你用的一般都是变量吧,搞不好就忘记加个to_f了,然后ruby就都给你算成整数了!
0 请登录后投票
   发表时间:2010-01-26  
如果想要保留原来的整数除法的话也是可以的
class Fixnum  
    def / (num)  
        self%num==0 ? (self.div num):(self.to_f/num.to_f)
    end  
end  



irb(main):001:0> 8/3
=> 2.6667
irb(main):002:0> 8/4
=> 2
irb(main):003:0> 8.0/4
=> 2.0000
irb(main):004:0>

0 请登录后投票
   发表时间:2010-01-26  
C, C++, C#, Java, Python, Scala, Ruby 里面整数相除的结果都是整数
只有 Haskell 和 Javascript 有可能出现浮点结果

应该向多数看齐才对 ……
0 请登录后投票
   发表时间:2010-01-26  
其实还有Matlab,perl都是出来浮点的结果!

python里面有一个
from __future__ import division,不知道是不是要把这个特性加到以后的python里面。

我个人觉得还是有这个特点比较方便,强类型的语言当然这不是个问题。脚本语言本来就不定义类型,还是生成浮点方便。因为我主要是用脚本语言来些一点计算的小程序或者处理我仿真出来的结果来生出图表,呵呵!
0 请登录后投票
   发表时间:2010-01-27  
hankgong 写道
其实还有Matlab,perl都是出来浮点的结果!

python里面有一个
from __future__ import division,不知道是不是要把这个特性加到以后的python里面。

我个人觉得还是有这个特点比较方便,强类型的语言当然这不是个问题。脚本语言本来就不定义类型,还是生成浮点方便。因为我主要是用脚本语言来些一点计算的小程序或者处理我仿真出来的结果来生出图表,呵呵!


ruby本来就是强类型语言。
至于perl 这东西的类型比较怪. 基本可以看作弱类型语言.

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics