こんにちは。きんくまです。
またまた小ネタというかスニペットです。
前に価格の文字から数値を出したのですが
> [JavaScript] 価格の文字列から価格の数値を出したい
この逆をやろうと思いました。
例えば
1234567 -> “1,234,567”
みたいな感じに桁区切りの文字列を出したいです。
それでTypeScriptでこの前のやつと合わせてクラス化してみました。
アルゴリズム的に簡単になるように、配列を反転させて、下から数えて3桁ずつ「,」の文字を追加してるけど、きっともっと早いやり方はあると思う。
でも実用上問題ないので、このまま使うのだ。
module kk{ export class PriceUtil{ static PRICE_DELIMITER:string = ","; constructor(){ } //文字列から数値をえる static getPriceFromString(priceStr:string):number{ var reg:RegExp = /[^\-0-9]+/gi; var convertedStr:string = priceStr.replace(reg, ""); var price:number = parseInt(convertedStr, 10); return price; } //数値から文字列をえる static getDelimitedPriceString(price:number):string{ var isMinus:boolean = price < 0; if(isMinus){ price *= -1; } var priceStr:string = price + ""; if(priceStr.length < 1){ return ""; } var priceStrs:string[] = priceStr.split("").reverse(); var cnt:number = 0; var len:number = priceStrs.length; while(cnt < len){ if(cnt != 0 && cnt % 3 == 0){ priceStrs[cnt] = priceStrs[cnt] + PriceUtil.PRICE_DELIMITER; } cnt++; } var delimitedPriceStr = priceStrs.reverse().join(""); if(isMinus){ delimitedPriceStr = "-" + delimitedPriceStr; } return delimitedPriceStr; } } }
うまくいってるか確認します
var price:number[] = [ 1, 12, 123, 1234, 12345, 123456, 1234567, 12345678 ,-1, -12, -123, -1234, -12345, -123456, -1234567, -12345678 ]; for(var i:number = 0, len:number = price.length; i < len; i++) { var str:string = kk.PriceUtil.getDelimitedPriceString(price[i]); console.log(price[i], str); }
出力
1 "1" 12 "12" 123 "123" 1234 "1,234" 12345 "12,345" 123456 "123,456" 1234567 "1,234,567" 12345678 "12,345,678" -1 "-1" -12 "-12" -123 "-123" -1234 "-1,234" -12345 "-12,345" -123456 "-123,456" -1234567 "-1,234,567" -12345678 "-12,345,678"
うまくいってるっぽいです
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ