浏览 3452 次
锁定老帖子 主题:Ruby用于日常计算的两个有用的配置
精华帖 (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函数。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-25
恩,ruby就是让人hack的
|
|
返回顶楼 | |
发表时间:2010-01-26
二楼不要说怪话。
|
|
返回顶楼 | |
发表时间:2010-01-26
7.0/2 |
|
返回顶楼 | |
发表时间:2010-01-26
liusong1111 写道 7.0/2 对,应该这么做 |
|
返回顶楼 | |
发表时间:2010-01-26
我当然知道是可以用
7.0/2 这样的方式来算这样的简单演示。 但是在你写程序来算一点东西的时候,你用的一般都是变量吧,搞不好就忘记加个to_f了,然后ruby就都给你算成整数了! |
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2010-01-26
C, C++, C#, Java, Python, Scala, Ruby 里面整数相除的结果都是整数
只有 Haskell 和 Javascript 有可能出现浮点结果 应该向多数看齐才对 …… |
|
返回顶楼 | |
发表时间:2010-01-26
其实还有Matlab,perl都是出来浮点的结果!
python里面有一个 from __future__ import division,不知道是不是要把这个特性加到以后的python里面。 我个人觉得还是有这个特点比较方便,强类型的语言当然这不是个问题。脚本语言本来就不定义类型,还是生成浮点方便。因为我主要是用脚本语言来些一点计算的小程序或者处理我仿真出来的结果来生出图表,呵呵! |
|
返回顶楼 | |
发表时间:2010-01-27
hankgong 写道 其实还有Matlab,perl都是出来浮点的结果!
python里面有一个 from __future__ import division,不知道是不是要把这个特性加到以后的python里面。 我个人觉得还是有这个特点比较方便,强类型的语言当然这不是个问题。脚本语言本来就不定义类型,还是生成浮点方便。因为我主要是用脚本语言来些一点计算的小程序或者处理我仿真出来的结果来生出图表,呵呵! ruby本来就是强类型语言。 至于perl 这东西的类型比较怪. 基本可以看作弱类型语言. |
|
返回顶楼 | |