Techioz Blog

Ruby で float を指定された有効桁数に丸めるにはどうすればよいですか?

概要

Rのsignif関数に相当するものがRubyにあればいいですね。

例えば:

>> (11.11).signif(1)
10
>> (22.22).signif(2)
22
>> (3.333).signif(2)
3.3
>> (4.4).signif(3)
4.4 # It's usually 4.40 but that's OK. R does not print the trailing 0's
    # because it returns the float data type. For Ruby we want the same.
>> (5.55).signif(2)
5.6

解決策

おそらくもっと良い方法があるでしょうが、これはうまくいくようです:

class Float
  def signif(signs)
    Float("%.#{signs}g" % self)
  end
end

(1.123).signif(2)                    # => 1.1
(11.23).signif(2)                    # => 11.0
(11.23).signif(1)                    # => 10.0