間が開きましたが第三回です。


Rubyのプログラムで金額表記をしたいと思います。

例: 1234567890 > \1,234,567,890

前回同様、以下の要領でお願いします。
◎この質問は、プログラムの書き方がわからないのではなく「こんな書き方もできる」の募集です。
◎面白いプログラム、とても短いプログラム、トリッキーなもや勉強になるものは喜ばしいです。
◎このプログラムが役立つ場面は想像できません :-P
◎Rubyがダメな人はRuby以外でも可

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/04/07 11:08:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数75

ポイント50pt

1回目、2回目を拝見させていただきましたが、回答者の皆さんの創意工夫がある書き方が楽しいですね。

プログラミング勉強中ということで参加させてください。

(私はRubyは勉強不足なのでPHPで書きます。)

PHPにはmoney_format関数というのがあるようですが、Cのライブラリ関数のstrfmonが使える環境でないと動かないです…。

稼動確認できませんでした。

<?php
$str_before = '1234567890';
setlocale(LC_MONETARY,'japanese');
print money_format('%n', $str_before);
?>

number_formatで千位毎にカンマを出力させるのが一番簡単じゃないでしょうか。

<?php
$str_before = '1234567890';
print "\\" . number_format($str_before);
?>

仕方がないので無理やり力技で書いてみましたが、無駄にコードが長くなってしまいました。

ホントに意味がないですね…。

<?php
$str_before = '1234567890';
if (strlen($str_before)!=0) {
	// 文字列が3で割り切れない場合、文字列先頭の余り分を配列にセット
	$str_mod = strlen($str_before)%3;
	if ($str_mod != 0) {
		$str_array[] = substr($str_before,0,$str_mod);
		$str_before = substr($str_before, $str_mod, strlen($str_before));
	}
	// 文字列を3文字分ずつ区切って配列にセット
	for ($i=0;$i<strlen($str_before);$i+=3) {
		$str_array[] = substr($str_before, $i, 3);
	}
	// 配列の値を先頭から抜き出し、シングルクォートを追加
	// 配列の最後の値の後にはシングルクォートが不要なので処理を分ける
	print '\\';
	while (count($str_array)>1) {
		print array_shift($str_array);
		print ",";
	}
	print array_shift($str_array);
}
?>

ダラダラと書きましたが、なんだかとてもつまらない物になってしまいました。

Rubyistの方の回答に期待したいと思います。

(踏み台にでもなれたら本望です。)

id:nisyu

ありがとうございます

PHPはあまり使って無いのでわからないんですが、数字から文字列を作る場合は単に文字列に変換する関数があるのですかね?

2006/04/03 08:19:32
id:hnagoya No.2

回答回数26ベストアンサー獲得回数3

ポイント50pt

http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/...

から引用しますと

s = '1234567890'

while s.sub!(/^(\d+)(\d{3}(?:,\d{3})*)$/, '\1,\2') do end

puts '\\' + s

puts '\\' + '1234567890'.reverse.gsub(/(\d{3})(?=\d)/,'\1,').reverse

という書き方があるようです。

id:nisyu

ありがとうございます

ohzakiさんのページ、正規表現関連では以前からお世話になってます。参考になりますね。

これも紹介されていたとは。

2006/04/03 08:24:57
  • id:nisyu
    …思ったより反応が少なかったのですが(汗
    また面白い問題があったら出します。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません