ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript 数値書式設定の一般クラスaccounting.jsの使用法_javascriptスキル

Javascript 数値書式設定の一般クラスaccounting.jsの使用法_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 17:50:311017ブラウズ

コードの内容とダウンロード アドレス
accounting.js コードは次のとおりです:

コードをコピーします コードは次のとおりです:

/*!
* Accounting.js v0.3.2
* Copyright 2011, Joss Crowcroft
*
* MIT 라이센스에 따라 자유롭게 배포 가능.
* 회계.js의 일부는 underscore.js에서 영감을 얻었거나 차용했습니다.
*
* 전체 세부 정보 및 문서:
* http://josscrowcroft.github.com/accounting.js/
*/
(function(root, undefine) {
/* --- 설정 --- */
// 나중에 전역적으로 내보내거나 참조할 로컬 라이브러리 개체를 만듭니다.
var lib = {};// 현재 버전
lib.version = '0.3.2';
/* --- 노출된 설정 --- */
// 라이브러리의 설정 구성 개체 .
// 통화 및 숫자 형식에 대한 기본 매개변수가 포함되어 있습니다.
lib.settings = {
currency: {
symbol : "$", // 기본 통화 기호는 '$'입니다.
format : "%s%v", // 출력 제어: %s = 기호, %v = 값(객체일 수 있음, 문서 참조)
decimal : ".", // 소수점 구분 기호
thousand : " ,", // 천 단위 구분 기호
정밀도 : 2, // 소수점 자리
그룹화 : 3 // 자릿수 그룹화(아직 구현되지 않음)
},
숫자: {
정밀도 : 0 , // 숫자의 기본 정밀도는 0
그룹화 : 3, // 숫자 그룹화(아직 구현되지 않음)
thousand : ",",
decimal :
}
} ;
/* --- 내부 도우미 메서드 --- */
// 나중에 사용할 수 있는 ECMAScript 5 메서드에 대한 참조 저장
var NativeMap = Array.prototype.map,
nativeIsArray = Array .isArray,
toString = Object.prototype.toString;
/**
* 제공된 매개변수가 문자열인지 테스트합니다.
* underscore.js
*/
function isString(obj) {
return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
}
/**
* 제공된 매개변수가 underscore.js의 문자열
*인지 테스트하고 ECMA5의 기본 Array.isArray
에 위임합니다.*/
function isArray(obj) {
return NativeIsArray ? NativeIsArray(obj) : toString.call(obj) === '[객체 배열]';
}
/**
* 제공된 매개변수가 실제 객체인지 테스트합니다.
*/
function isObject(obj) {
return obj && toString.call(obj) === '[object Object]';
}
/**
* 밑줄의 _.defaults와 유사한 기본 개체로 개체를 확장합니다.
*
* API 메서드에서 매개변수 처리를 추상화하는 데 사용됩니다.
*/
function defaults(object, defs) {
var key;
객체 = 객체 || {};
defs = defs || {};
// 프로토타입이 아닌 객체 속성에 대해 반복:
for (key in defs) {
if (defs.hasOwnProperty(key)) {
// 정의되지 않은 경우에만 값을 기본값으로 바꿉니다(허용 비어 있음/0 값):
if (object[key] == null) object[key] = defs[key];
}
}
객체 반환;
}
/**
* 반복 루프를 위한 `Array.map()` 구현
*
* 각 배열 값에 대해 `iterator`를 호출한 결과로 새 배열을 반환합니다.
* 가능한 경우 기본 Array.map으로 연기
*/
function map(obj, iterator, context) {
var results = [], i, j;
if(!obj)가 결과를 반환합니다.
// 존재하는 경우 기본 .map 메서드를 사용합니다.
if (nativeMap && obj.map === NativeMap) return obj.map(iterator, context);
// 네이티브 .map에 대한 대체:
for (i = 0, j = obj.length; i < j; i ) {
results[i] = iterator.call(context, obj[ i], i, obj);
}
결과 반환;
}
/**
* 정밀도 값을 확인하고 정규화합니다(양의 정수여야 함)
*/
function checkPrecision(val, base) {
val = Math.round(Math.abs(val));
반환은 NaN(val)입니까? 베이스 : 발;
}
/**
* 형식 문자열 또는 객체를 구문 분석하고 렌더링에 사용할 형식 obj를 반환합니다.
*
* `format`은 기본(양수) 형식의 문자열이거나 `pos를 포함하는 객체
*입니다. `(필수), `neg` 및 `zero` 값(또는
* 문자열이나 객체를 반환하는 함수)
*
* string 또는 format.pos 중 하나에 "%v"(값 ) 유효
*/
function checkCurrencyFormat(format) {
var defaults = lib.settings.currency.format;
// 형식 매개변수로 함수 허용(문자열 또는 객체를 반환해야 함):
if ( typeof format === "function" ) format = format();
// 형식은 문자열일 수 있으며, 이 경우 '값'("%v")이 있어야 합니다.
if ( isString( format ) && format.match("%v") ) {
// 양수, 음수 및 0 형식을 생성하고 반환합니다.
return {
pos : format,
neg : format.replace("-", "").replace("%v", " -%v"),
zero : 형식
};
// 형식이 없거나 개체에 유효한 양수 값이 누락된 경우 기본값을 사용합니다.
} else if ( !format || !format.pos || !format.pos.match("%v") ) {
// defaults가 문자열인 경우 다음 번에 더 빠르게 확인할 수 있도록 객체로 캐스팅합니다.
return ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {
pos : 기본값,
neg : defaults.replace("%v", "-%v"),
zero : 기본값
};
}
// 그렇지 않으면 형식이 괜찮다고 가정합니다.
return format;
}
/* --- API メソッド --- */
/**
* 文字列/文字列の配列を受け取り、すべての書式設定/クラフトを削除し、生の浮動小数点値を返します
* エイリアス:accounting.`parse(string)`
*
* には 10 進数を含める必要があります浮動小数点数と一致する正規表現 (デフォルトは
*accounting.settings.number.decmal)。数値に非標準の小数
* 区切り文字が使用されている場合は、それを 2 番目の引数として指定します。
*
* 括弧で囲まれた負の値にも一致します (例: "$ (1.99)" => -1.99)
*
* エラーはスローされません (`NaN` は 0 になります)。これは将来変更される可能性があります
*/
var unformat = lib.unformat = lib.parse = function(value, 10 進数) {
// 再帰的に配列のフォーマットを解除します:
if (isArray(value)) {
return map(value, function(val) {
return unformat(val, 10 進数);
});
}
// サイレントに失敗します (適切なエラーが必要です):
value = value || 0;
// すでに数値である場合は、値をそのまま返します。
if (typeof value === "number") return value;
// デフォルトの小数点は設定から​​取得されますが、たとえば次のように設定できます。 "," オプション:
10 進数 = 10 進数 || lib.settings.number.10進数;
// 数字、小数点、マイナス記号以外のすべてを削除する正規表現を構築します:
var regex = new RegExp("[^0-9-" decim "]", ["g"]),
unformatted = parseFloat(
("" value)
.replace(/((.*))/, "-$1") // 括弧で囲まれた値を負の値に置き換えます
.replace(regex, ' ') // 不要なものをすべて取り除きます
.replace(decimal, '.') // 小数点が標準であることを確認してください
);
// これは通知なしで失敗するため、問題が発生する可能性があります。様子を見てみましょう:
return !isNaN(unformatted) ?未フォーマット: 0;
};
/**
* 浮動小数点を小数のように扱う toFixed() の実装
*
*
が引き起こすバイナリ丸めの問題 (例: (0.615).toFixed(2) === "0.61") を修正します。 * 会計および財務関連のソフトウェアの問題。
*/
var toFixed = lib.toFixed = function(value, precision) {
precision = checkPrecision(precision, lib.settings.number.precision);
var power = Math.pow(10, precision);
// 精度で乗算し、正確に丸め、除算してネイティブ toFixed() を使用します。
return (Math.round(lib.unformat(value) * power) / power).toFixed(precision);
};
/**
* カンマ区切りの千の桁とカスタムの精度/小数点以下の桁数を使用して数値をフォーマットします
*
* 精度と千の位/小数点の区切り文字をオーバーライドしてローカライズします
* 2 番目のパラメータ `precision` はオブジェクトにすることができます`settings.number` と一致します
*/
var formatNumber = lib.formatNumber = function(number, precision, 1000, 10 進数) {
// 配列を再帰的にフォーマットします:
if (isArray(number) ) {
return map(number, function(val) {
return formatNumber(val, precision, 1000, 10 進数);
});
}
// 数値をクリーンアップします:
number = unformat(number);
// デフォルトを拡張して、2 番目のパラメータ (オブジェクトの場合) またはすべてのパラメータからオプション オブジェクトを構築します:
var opts =defaults(
(isObject(precision) ? precision : {
precision : precision,
thousand : 千,
10 進数 : 10 進数
}),
lib.settings.number
),
// 精度のクリーンアップ
usePrecision = checkPrecision(opts.precision) ,
// 計算を実行します:
negative = number
0 ? "-" : "",
base = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) "",
mod =base.length > 3?ベースの長さ % 3 : 0;
// 数値をフォーマットします:
return negative (mod ?base.substr(0, mod) opts.thousand : "")base.substr(mod).replace(/(d{3})(? =d)/g, "$1" opts.thousand) (usePrecision ? opts.Decimal toFixed(Math.abs(number), usePrecision).split('.')[1] : "");
};
/**
* 数値を通貨にフォーマットします
*
* 使用法:accounting.formatMoney(number,symbol,precision,somethingssep,decimalSep,format)
* デフォルト:(0, "$", 2, ",", ".", "%s%v")
*
* 記号、精度、桁区切り記号、および形式をオーバーライドしてローカライズします。
* 2 番目のパラメーターは、`settings に一致するオブジェクトにすることができます.currency` これが最も簡単な方法です。
*
* やるべきこと: パラメーターを整理する
*/
var formatMoney = lib.formatMoney = function(number, シンボル, 精度, 1000, 10 進数, format) {
// 配列を再帰的にフォーマットします:
if ( isArray(number)) {
return map(number, function(val){
return formatMoney(val, シンボル, 精度, 1000, 10 進数, フォーマット);
});
}
// 数値をクリーンアップします:
number = unformat(number);
// デフォルトを拡張して、2 番目のパラメータ (オブジェクトの場合) またはすべてのパラメータからオプション オブジェクトを構築します:
var opts =defaults(
(isObject(symbol) ?symbol : {
symbol :symbol,
精度 : 精度、
千 : 千、
10 進数 : 10 進数、
形式 : 形式 }),
lib.settings.currency
),
// 形式をチェックします (pos、neg、およびゼロを含むオブジェクトを返します):
formats = checkCurrencyFormat(opts.format),
//この値に使用する形式を選択します:
useFormat = number > 0 ? formats.pos : 数値 // 通貨記号を追加して返します:
return useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision) )、opts.thousand、opts.10 進数));
};
/**
* 数値のリストを会計列にフォーマットします。空白を埋め込みます。
* 通貨記号、桁区切り記号、小数点以下の桁を並べます。
*
* リストは数値の配列である必要があります。
* 2 番目のパラメータは、パラメータに一致するキーを含むオブジェクトにすることができます
*
* 同じ長さの会計形式の数値文字列の配列を返します
*
* 注意: `white-space:pre` CSS
* ブラウザーが出力文字列内の空白を折りたたむのを防ぐために、リスト コンテナーでルールが必要です。
*/
lib.formatColumn = function(リスト, シンボル, 精度, 1000, 10 進数, 形式) {
if (!list) return [];
// デフォルトを拡張して、2 番目のパラメータ (オブジェクトの場合) またはすべてのパラメータからオプション オブジェクトを構築します:
var opts =defaults(
(isObject(symbol) ?symbol : {
symbol :symbol,
精度 : 精度、
千 : 千、
十進数 : 10 進数、
形式 : 形式
})、
lib.settings.currency
)、
//形式をチェックします (pos、neg、およびゼロのオブジェクトを返します)。今のところ必要なのは pos だけです:
formats = checkCurrencyFormat(opts.format),
// 文字列の先頭または通貨記号の後にパディングするかどうか:
padAfterSymbol = formats.pos.indexOf("%s") // 列内の最長文字列の長さの値を保存します:
maxLength = 0,
// オプションに従ってリストをフォーマットし、最長文字列の長さを保存します:
formatted = map(list, function(val, i) {
if (isArray(val)) {
// list が多次元配列の場合、列を再帰的にフォーマットします:
return lib.formatColumn (val, opts);
} else {
// 値をクリーンアップします
val = unformat(val)
// この値に使用する形式を選択します (pos、neg、ゼロ) ):
var useFormat = val > 0 ? formats.pos : val // この値をフォーマットして、長さを保存します。 >fVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decmal));
if (fVal.length > maxLength) maxLength = fVal.length
return fVal;
};
// リスト内の各数値を埋め込み、数値の列を送り返します:
return map(formatted, function(val, i) {
// これが文字列である場合のみ (ネストされた配列ではない)すでに埋め込まれているはずです):
if (isString(val) && val.length < maxLength) {
// シンボルの位置に応じて、シンボルの後またはインデックス 0 に埋め込みます:
return PadAfterSymbol ? val.replace(opts.symbol, opts.symbol (new Array(maxLength - val.length 1).join(" "))) : (new Array(maxLength - val.length 1).join(" ")) val;
}
戻り値
});
};
/* --- モジュール定義 --- */
// CommonJS のアカウントをエクスポートします。 AMD モジュールとしてロードされる場合は、そのように定義します。
// それ以外の場合は、グローバル オブジェクトに `accounting` を追加するだけです。
if (typeof exports !== 'unknown') {
if (typeof module !== 'unknown' && module.exports) {
エクスポート = module.exports = lib;
}
exports.accounting = lib;
} else if (typeofdefine === 'function' &&define.amd) {
// ライブラリを AMD モジュールとして返します:
define([], function() {
returnライブラリ;
});
} else {
// `accounting` を元の値に戻すには、accounting.noConflict を使用します。
// ライブラリの `accounting` オブジェクトへの参照を返します。
// 例: `varnumbers =accounting.noConflict();`
lib.noConflict = (function(oldAccounting) {
return function() {
// ルートの `accounting` 変数の値をリセットします:
root.accounting = oldAccounting;
// noConflict メソッドを削除します:
lib.noConflict = unknown;
// ライブラリへの参照を返して再割り当てします:
return lib; >};
})(root.accounting);
// ルート (グローバル/ウィンドウ) オブジェクトで `fx` を宣言します:
root['accounting'] = lib;
}
// ルートはブラウザの `window` またはサーバー上の `global` になります:
}(this));


官方下ダウンロード地址:https://raw.github.com/josscrowcroft/accounting.js/master/accounting.js
使用例
formatMoney



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。