Skip to content

Instantly share code, notes, and snippets.

@hrdaya
Last active August 29, 2015 14:16
Show Gist options
  • Save hrdaya/7487dfc6db961eeed476 to your computer and use it in GitHub Desktop.
Save hrdaya/7487dfc6db961eeed476 to your computer and use it in GitHub Desktop.
数字文字列を桁区切りの文字列に変換(全角は半角に変換・数字以外の文字は削除・小数点以下の桁数指定) ref: http://qiita.com/hrdaya/items/c86f4ecf7288879ca7b1
/**
* 数字のみにして桁区切り(小数点以下の桁数を指定)
*
* @param {String} val 変換する文字列
* @param {Number} num 小数点以下の桁数
*
* @return {string} 文字列から数字、ドット、ハイフン以外の文字を取り除き
* parseFloatで変換した数値を桁区切りにして返す
* 最初に全角の数字、ドット、ハイフン、マイナスは半角に変換
*/
var numberFormat = function (val, num) {
// 保険でtoStringしておく
val = val.toString();
// numの指定の無い場合は整数
num = parseInt(num, 10);
num = isNaN(num) ? 0 : num;
// 全角を半角に変換(ハイフン、ドット、数字以外を取り除く)
var str = val.replace(/[0-9.‐-]/g, function (s) {
return String.fromCharCode(s.charCodeAt(0) - 65248);
}).replace(/(?!^\-)[^\d\.]/g, "");
// 一旦浮動小数点に変換
var number = parseFloat(str);
// 変換できなかった場合は0
number = isNaN(number) ? 0 : number;
// 浮動小数点に変換した数字を再度文字列に直し、ドットで分割
var split = number.toString().split(".");
// 小数点以下用の文字列
var dec = "";
// 小数点以下の桁数が指定されている場合
if (num > 0) {
if (split.length < 2) {
// 分割した文字列に小数点以下が無い場合はsplit[1]に桁数分の0を挿入
split.push(Array(num + 1).join("0"));
} else if (split[1].length < num) {
// 分割した文字列に小数点以下が存在する場合は桁数分の0を文字列の後ろに付ける
split[1] += Array(num + 1).join("0");
}
// 小数点以下用の文字列作成(先頭から桁数分を切り出し)
dec = "." + split[1].slice(0, num);
}
// 整数部分を3桁で桁区切り
split[0] = split[0].replace(/(\d+)/, function (match) {
return match.replace(/(\d)(?=(\d\d\d)+$)/g, "$1,");
});
// 整数部分と小数点以下部分を結合して返す
return split[0] + dec;
};
/**
* 数字のみにして桁区切り(小数点以下の桁数を指定)
*
* @param {Number} num 小数点以下の桁数
*
* @return {string} 文字列から数字、ドット、ハイフン以外の文字を取り除き
* parseFloatで変換した数値を桁区切りにして返す
* 最初に全角の数字、ドット、ハイフン、マイナスは半角に変換
*/
String.prototype.numberFormat = function (num) {
// numの指定の無い場合は整数
num = parseInt(num, 10);
num = isNaN(num) ? 0 : num;
// 全角を半角に変換(ハイフン、ドット、数字以外を取り除く)
var str = this.replace(/[0-9.‐-]/g, function (s) {
return String.fromCharCode(s.charCodeAt(0) - 65248);
}).replace(/(?!^\-)[^\d\.]/g, "");
// 一旦浮動小数点に変換
var number = parseFloat(str);
// 変換できなかった場合は0
number = isNaN(number) ? 0 : number;
// 浮動小数点に変換した数字を再度文字列に直し、ドットで分割
var split = number.toString().split(".");
// 小数点以下用の文字列
var dec = "";
// 小数点以下の桁数が指定されている場合
if (num > 0) {
if (split.length < 2) {
// 分割した文字列に小数点以下が無い場合はsplit[1]に桁数分の0を挿入
split.push(Array(num + 1).join("0"));
} else if (split[1].length < num) {
// 分割した文字列に小数点以下が存在する場合は桁数分の0を文字列の後ろに付ける
split[1] += Array(num + 1).join("0");
}
// 小数点以下用の文字列作成(先頭から桁数分を切り出し)
dec = "." + split[1].slice(0, num);
}
// 整数部分を3桁で桁区切り
split[0] = split[0].replace(/(\d+)/, function (match) {
return match.replace(/(\d)(?=(\d\d\d)+$)/g, "$1,");
});
// 整数部分と小数点以下部分を結合して返す
return split[0] + dec;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment