[#47173] 小数点以下を切り捨てる方法について — "T.Soejima" <clev@...2.so-net.ne.jp>

お世話になっております。そえじま@勉強中です。

16 messages 2010/06/23

[ruby-list:47181] Re: 小数点以下を切り捨てる方法について

From: take_tk <ggb03124@...>
Date: 2010-06-24 02:03:21 UTC
List: ruby-list #47181
たけ(tk)です
[ruby-list:47173] 小数点以下を切り捨てる方法につい
て にて
"T.Soejima" <clev@ck2.so-net.ne.jp> さん曰く:

> Rubyで 1.2345678 のような桁数の小数を、例えば 1.2345 と表示させて
> くれるようなメソッドはありますでしょうか?

Ruby の Float#floor は Fixnum を返すという仕様なの
で、桁位置を指定できないみたいですね。

# http://www.ruby-lang.org/ja/man/html/Numeric.html
# http://doc.okkez.net/static/191/class/Float.html

(1)桁位置を指定した場合には Float を返す。
(2)桁位置を指定しなければ Fixnum を返す。
ように拡張してしまいましょう。

===

# http://www.ruby-lang.org/ja/man/html/Numeric.html
# http://doc.okkez.net/static/191/class/Float.html

module Numeric::Keta
  def self.included(klass)
    klass.class_eval do
      alias :floor_without_keta  :floor
      alias :floor :floor_with_keta
    end
  end

  def floor_with_keta(d=nil)
    return floor_without_keta unless d
    x = 10**d
    (self * x).floor_without_keta.quo(x)  # / x では Integer#/ 
  end
end

p 1.234567890.floor           #=> 1
p 1.234567890.floor.class     #=> Fixnum
p 1.234567890.floor(4) rescue p $!  #=> #<ArgumentError: wrong number of arguments (1 for 0)>

::Float.send :include, Numeric::Keta

p 1.234567890.floor(4)        #=> 1.2345
p 1.234567890.floor(4).class  #=> Float
p 1.234567890.floor(0)        #=> 1.0
p 1.234567890.floor(0).class  #=> Float
p 1.234567890.floor           #=> 1
p 1.234567890.floor.class     #=> Fixnum


Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


In This Thread