LoginSignup
161
126

More than 5 years have passed since last update.

数値をカンマ区切りにする

Last updated at Posted at 2014-04-04

数値(もしくは文字列)をカンマ区切りにする関数を書いてください

その場で何も見ずに書いてくれみたいな事があったので残しときます
何かの参考になれば。何かの。

あれ、Qiitaの使い方ってこんな感じでもいいのかな…

追記

コメント欄より、一番簡単に実装するなら

toLocaleString.js
var num = 12345;
num.toLocaleString();

で良いです。
しかし、ブラウザによって異なる挙動を起こすことも有りますので注意してください。

2015 / 04 / 09追記

コメント欄より、toLocaleStringに関してはSafariはそもそも対応していないようです。

正規表現

まず、正規表現でやるやつ

regex.js
// 正規表現でセパレート
function separate(num){
    return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');
}

実際使うときはこれでいいはず。
でも正規表現をしっかり理解していないと絶対書けない
すくなくとも私は書けません

ループ

つぎ、ループでやる
多分多くの人がこんな感じだと思う(特に自分達みたいな学生)

loop.js
// ループでセパレート
function separate(num){
    // 文字列にする
    num = String(num);

    // 返却用
    var separated = '';

    // 位置文字ずつ配列にする
    var nums = num.split('');

    // 長さを入れとく
    var len = nums.length;

    // 一文字ずつ追加してくよ
    for(var i = 0; i < len; i++){
        // 後ろから追加していく
        separated = nums[(len-1)-i] + separated;

        // 3桁ごとにカンマ追加
        if(i % 3 === 2 && len > 3){
            separated = ',' + separated;
        }
    }

    return separated;
}

今回はJavaScriptだけど、どの言語でもできそうな実装
配列の反転(reverse)使えばもうちょい短くなるし?
無難でいいと思う。多分文句も言われませんよね?

ふむ、でも私これで書いてません
再帰関数使いました

再帰関数

自分自身を呼び出すアレです

recursive.js
// 再帰関数でセパレート
function separate(num){
    // 文字列にする
    num = String(num);

    var len = num.length;

    // 再帰的に呼び出すよ
    if(len > 3){
        // 前半を引数に再帰呼び出し + 後半3桁
        return separate(num.substring(0,len-3))+','+num.substring(len-3);
    } else {
        return num;
    }
}

個人的に結構いい感じ
スマートでわかりやすいと思うんですけどどうでしょう

んで

結局何が言いたかったのかって言うと、
プログラムの世界っておんなじ動作でも中身が全然違うからおもしろい
もっと(かっこ)いい書き方あったら教えてください

161
126
13

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
161
126