人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: taka4
●カテゴリ:コンピュータ
✍キーワード:Ruby ダメ トリッキー プログラム 勉強
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ●
●50ポイント

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の方の回答に期待したいと思います。

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

◎質問者からの返答

ありがとうございます

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


2 ● hnagoya
●50ポイント

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

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

◎質問者からの返答

ありがとうございます

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ