最近のプロジェクトでは、フロントエンドで金額を 1000 分の 1 でフォーマットする必要があります (つまり、3 桁ごとにカンマで区切る)。以前のバージョンは私の見落としでした。現在修正が加えられていますが、まだ不完全な点がある場合は、アドバイスをお願いします。
1. カンマ区切りの 0 ~ 9 の数字をカンマで区切ってサポートします。
JSコードは次のとおりです。
次のようにコードをコピーします。
/**
*JSフォーマット
* @paramnumber フォーマットする数値
* @param d [0-9] カンマ区切り
*/
関数 numFormat(数値,d) {
var numArrs = ['0','1','2','3','4','5','6','7','8','9'],
REG_NUMBER = /^/d+(./d+)?$/;
d = d || 3; // 渡されない場合は 1000 分の 3 桁です。
if(isNumber(数値) || isString(数値) || REG_NUMBER.test(数値)) {
//まず文字列に変換します
var toString = 数値 + '',
isPoint = toString.indexOf('.'),
プレフィックス、// プレフィックス
サフィックス、// サフィックス
t = '';
if(isPoint > 0) {
プレフィックス = toString.substring(0,isPoint);
suffix = toString.substring(isPoint + 1);
}else if(isPoint == 0) {
プレフィックス = '';
接尾辞 = toString.substring(1);
}それ以外 {
プレフィックス = toString;
サフィックス = '';
}
if(プレフィックス != '') {
prefixArr = prefix.split('').reverse();
var isArrayIndex = isArray(d,numArrs);
if(isArrayIndex > -1) {
for(var i = 0, ilen = prefixArr.length; i < ilen; i+=1) {
t += prefixArr[i] + ((i + 1) % isArrayIndex == 0 && (i + 1) != prefixArr.length ? "," : "");
}
t = t.split("").reverse().join("");
if(サフィックス != '') {
t + "." を返します。
}それ以外 {
t を返します。
}
}それ以外 {
return '渡された桁数が正しくありません';
}
}else if(プレフィックス != '' && サフィックス == ''){
プレフィックスを返します。
}else if(プレフィックス == '' && サフィックス != ''){
プレフィックス = 0;
プレフィックス + サフィックスを返します。
}それ以外 {
return "エラーがあります";
}
}それ以外 {
return 'フォーマットするために渡された数値が準拠していません';
}
}
関数 isArray(item,arrs) {
for(var i = 0, ilen = arrs.length; i < ilen; i++) {
if(item == arrs[i]) {
私を返します。
}
}
-1 を返します。
}
関数 isNumber(数値) {
return Object.prototype.toString.apply(number) === '[オブジェクト番号]';
}
関数 isString(数値) {
return Object.prototype.toString.apply(number) === ['オブジェクト文字列'];
}
しかし、不完全なようです。 console.log(numFormat("1111.00")); を呼び出すと、コンソール上で 1,111.00 ではなく 1,111 が出力されます。つまり、小数点が 0 の場合、ブラウザは自動的に消去します。最後の 0 を削除すれば、その他は正常です。テストしましたが、基本的に要件を満たしています。不完全な点がある場合は、アドバイスをお願いします。