SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【JavaScript】number_format 3桁区切りでカンマを入れる

問題

JavaScriptで、phpのnumber_fomat() みたいに3桁区切りでカンマを入れたいです。

答え

関数を自作する場合。小数や区切り文字など考慮した高機能版。

function number_format(number, decimals, decPoint, thousandsSep) {
	// php.js を参考に
	number = (number + '').replace(/[^0-9+\-Ee.]/g, '')
	var n = !isFinite(+number) ? 0 : +number
	var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
	var sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep
	var dec = (typeof decPoint === 'undefined') ? '.' : decPoint
	var s = ''
	var toFixedFix = function (n, prec) {
		var k = Math.pow(10, prec)
		return '' + (Math.round(n * k) / k).toFixed(prec)
	}
	// @todo: for IE parseFloat(0.55).toFixed(0) = 0;
	s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
	if (s[0].length > 3) {
		s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep)
	}
	if ((s[1] || '').length < prec) {
		s[1] = s[1] || ''
		s[1] += new Array(prec - s[1].length + 1).join('0')
	}
	return s.join(dec)
}

関数を自作する場合2。整数が渡される前提で正規表現で簡単に。(小数点以下が4桁以上あると小数点以下にもカンマがつくので注意)

function number_format(num) {
    return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');
}

関数を自作する場合3。 整数が渡される前提で正規表現で簡単に。(小数点以下が3桁以上あると小数点以下にもカンマがつくので注意)

function number_format(n) {
    return String(n).split(/(?=(?:\d{3})+(?:\.|$))/g).join( "," )
}

IE11以上なら、Number.prototype.toLocaleString()が使える

(12345678).toLocaleString()
let x = 9876543
x.toLocaleString('en')

IE11以上なら、Intl.NumberFormatが使える

// 普通に使う
new Intl.NumberFormat('us').format(12345678)
// 関数を定義して
const number_format = new Intl.NumberFormat('us').format

// 関数を使う
number_format(3456789)



	

関連するメモ

コメント