Last active
August 29, 2015 14:16
-
-
Save hrdaya/7487dfc6db961eeed476 to your computer and use it in GitHub Desktop.
数字文字列を桁区切りの文字列に変換(全角は半角に変換・数字以外の文字は削除・小数点以下の桁数指定) ref: http://qiita.com/hrdaya/items/c86f4ecf7288879ca7b1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 数字のみにして桁区切り(小数点以下の桁数を指定) | |
* | |
* @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; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 数字のみにして桁区切り(小数点以下の桁数を指定) | |
* | |
* @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