bar_1

contents_map

ラベル 金額 の投稿を表示しています。 すべての投稿を表示
ラベル 金額 の投稿を表示しています。 すべての投稿を表示

2008年1月29日火曜日

Ruby: 数字に桁区切りを入れたい(その2)

前回 は、数字を区切るためのインスタンス・メソッドを作成した。
今回はこのクラス Price に、コンストラクタと比較演算メソッドを、追加しよう。
Price.new の引数として、文字列、または、整数をとるものとする。
オープンクラス を使って、クラスに機能を追加した。
class Price
  public

  include Comparable

  #Constructer
  #
  def initialize( p_ )
    @val_orig = p_.to_s;
    @val_s_wo_d = del_digit_delimiter( "#{@val_orig}" );
    @val_s_w_d = add_digit_delimiter( @val_s_wo_d );
    @val_i = @val_s_wo_d.to_i;
  end

  def <=>(other)
    self.val_i <=> other.val_i;
  end

end
コンストラクタ: initialize では、4種類のインスタンス変数: val_orig, val_s_wo_d, val_s_w_d, val_i; が生成される。
それぞれ、オリジナルの値、桁区切りなしの値、桁区切りありの値、数値変換時の値、となる。
インスタンス・メソッド: <=> は、クラス Price のオブジェクト同士の大小比較を行うために、定義した[1]。

References:

  • [1] 『プログラミングRuby 第2版 言語編』; ‘Mixin’, p.101

2008年1月24日木曜日

Ruby: 数字に桁区切りを入れたい (その1)

数字に桁区切りを入れたい。

クラスPriceをつくってみよう。
内部で文字列と数字で値を保存する。
class Price

protected

def add_digit_delimiter( v_ )

#remove comma from v_.

v_.gsub(/[,]/){ |c| "" };



#adding commas from lower, each 3-digits.

v_.reverse.gsub(/[[:digit:]]{3}(?=\d)/){|d| "#{d},"}.reverse;

end



[追記]2013-04-13 3の倍数桁のときに、左端にカンマが付いてしまうため修正: (?=\d)を追加した。
def del_digit_delimiter( v_ )

v_.gsub(/,/){|d| ""};

end

��

��

これで、メインとなる処理はできた。