Rubyのプログラムで金額表記をしたいと思います。
例: 1234567890 > \1,234,567,890
前回同様、以下の要領でお願いします。
◎この質問は、プログラムの書き方がわからないのではなく「こんな書き方もできる」の募集です。
◎面白いプログラム、とても短いプログラム、トリッキーなもや勉強になるものは喜ばしいです。
◎このプログラムが役立つ場面は想像できません :-P
◎Rubyがダメな人はRuby以外でも可
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の方の回答に期待したいと思います。
(踏み台にでもなれたら本望です。)
また面白い問題があったら出します。