ruby - 我应该如何指定 Rationals 应该在 Ruby 中以十进制表示法显示?

标签 ruby view rational-number

如果我决定将 Ruby 中的 Rationals 用于控制台应用程序,但不希望它们显示为分数,是否有一种惯用的方法来指定它们应以十进制表示法显示?

我知道的选项包括:

 fraction = Rational(1, 2)
 puts "Use to_f: #{fraction.to_f}"
 puts(sprintf("Use sprintf %f", fraction))
 class Rational
   def to_s
     to_f.to_s
   end
 end
 puts "Monkey patch Rational#to_s: #{fraction}"

还有其他选择吗?

最佳答案

您可以在 sprintf 中使用 %g 来获得“正确”的精度:

puts "%g" % Rational(1,2)
#=> 0.5

我个人会像您一样使用 monkey patch rational,但我是 monkey patching 的粉丝。覆盖内置的 to_s 行为似乎完全适合控制台应用程序。

也许你有另一种选择,你可以编写自己的控制台,定义 Object#to_console 来调用 to_s,然后你可以在你自己的 Rational 中打补丁#to_console 代替。这种额外的努力将使它更安全,因为有 0.1% 的可能性某些库正在使用 Rational#to_s 已经以一种会破坏您的补丁的方式。

关于ruby - 我应该如何指定 Rationals 应该在 Ruby 中以十进制表示法显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494551/

相关文章:

ruby-on-rails - 如何洗牌 Resque 队列中的作业?

java - 有理数方法 - 分子和分母

floating-point - 用极限分母使数有理化

ruby - Sequel::Model:像create_table这样的方法从哪里来?

ruby-on-rails - Mongoid 和查询嵌入式位置?

java - IllegalArgumentException : width and height must be > 0 while loading Bitmap from View

symfony - 如何从 symfony 中的服务类渲染 View ?

java - getFilesDir() 在子类中查看

java - 我的 Rational 代码的主要方法

ruby - 了解 Ruby block 。为什么 Rspec 会这样做?