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

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

May 16, 2016 pm 05:50 PM

コードの内容とダウンロード アドレス
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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? Apr 04, 2025 pm 02:06 PM

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...

See all articles