數字格式化庫 accounting.js的使用說明

accounting.js 是一個用于格式化數字、貨幣和金額的輕量級庫,特別適合財務和會計應用。以下是其詳細使用說明:


安裝與引入

  1. 通過 npm 安裝

    bash

    復制

    下載

    npm install accounting

    引入:

    javascript

    復制

    下載

    const accounting = require('accounting');
  2. 直接引入腳本

    html

    復制

    下載

    運行

    <script src="path/to/accounting.js"></script>

核心方法

1. 格式化數字:formatNumber()
  • 語法

    javascript

    復制

    下載

    accounting.formatNumber(value, precision, thousand, decimal);
  • 參數

    • value: 要格式化的數字。

    • precision?(可選): 小數位數,默認為?0

    • thousand?(可選): 千位分隔符,默認為?,

    • decimal?(可選): 小數點符號,默認為?.

  • 示例

    javascript

    復制

    下載

    accounting.formatNumber(1234567.89);           // "1,234,568"
    accounting.formatNumber(123456.789, 2, " ", ","); // "123 456,79"

2. 格式化貨幣:formatMoney()
  • 語法

    javascript

    復制

    下載

    accounting.formatMoney(value, symbol, precision, thousand, decimal, format);
  • 參數

    • value: 要格式化的金額。

    • symbol?(可選): 貨幣符號,默認為?$

    • precision?(可選): 小數位數,默認為?2

    • thousand?(可選): 千位分隔符,默認為?,

    • decimal?(可選): 小數點符號,默認為?.

    • format?(可選): 格式字符串,如?%s%v(符號在前),默認為?%s%v

  • 示例

    javascript

    復制

    下載

    accounting.formatMoney(1234567.89);                 // "$1,234,567.89"
    accounting.formatMoney(-1234.56, "€", 2, ".", ",", "%v %s"); // "-1.234,56 €"

3. 解析格式化字符串:parse()
  • 語法

    javascript

    復制

    下載

    accounting.parse(string, decimal);
  • 參數

    • string: 要解析的字符串(如?"£1,234.56")。

    • decimal?(可選): 指定小數點符號,默認自動檢測。

  • 示例

    javascript

    復制

    下載

    accounting.parse("€1.234,56", ","); // 返回 1234.56

4. 格式化多列數據:formatColumn()
  • 語法

    javascript

    復制

    下載

    accounting.formatColumn(list, symbol, precision, thousand, decimal, format);
  • 參數:同?formatMoney(),但處理數組。

  • 示例

    javascript

    復制

    下載

    accounting.formatColumn([123.5, 3456.49, 777888.99], "¥", 2);
    // 返回 ["¥123.50", "¥3,456.49", "¥777,888.99"]

全局配置

通過?accounting.settings?修改默認行為:

javascript

復制

下載

accounting.settings = {currency: {symbol: "€",      // 默認貨幣符號format: "%s%v",   // 符號在前,數值在后decimal: ",",     // 小數點thousand: ".",    // 千位分隔符precision: 2      // 小數位數},number: {precision: 0,thousand: ",",decimal: "."}
};

高級用法

  • 自定義負數格式

    javascript

    復制

    下載

    // 使用括號表示負數
    accounting.formatMoney(-1234.56, "$", 2, ",", ".", "%s (%v)");
    // 返回 "$ (1,234.56)"
  • 處理超大數值(避免精度丟失):

    javascript

    復制

    下載

    accounting.formatMoney("12345678901234567890.12345"); // 正確解析字符串大數

注意事項

  1. 數值精度:JavaScript 浮點數計算可能存在精度問題,建議對極大/極小數值使用字符串形式。

  2. 國際化:根據地區調整?thousanddecimal?和?symbol,如歐洲格式:

    javascript

    復制

    下載

    accounting.formatMoney(1234.56, "€", 2, ".", ",", "%v %s"); // "1.234,56 €"
  3. 多列對齊:使用?formatColumn()?確保表格中的金額對齊。


通過靈活配置參數,accounting.js 能夠滿足多種數字和貨幣格式需求,尤其適合財務系統、報表工具等場景。

安裝后,import accounting from "accounting";

提示

無法找到模塊“accounting”的聲明文件。“d:/MyCode/wylims/lims-client/node_modules/accounting/accounting.js”隱式擁有 "any" 類型。 嘗試使用 `npm i --save-dev @types/accounting` (如果存在),或者添加一個包含 `declare module 'accounting';` 的新聲明(.d.ts)文件ts(7016)

這個問題是因為 TypeScript 無法找到?accounting.js?的類型聲明文件(*.d.ts)。以下是幾種解決方案:


解決方案 1:安裝社區類型聲明(推薦嘗試)

雖然?accounting.js?官方沒有提供 TypeScript 類型,但可以嘗試查找社區維護的類型聲明:

bash

復制

下載

npm install --save-dev @types/accounting

如果上述命令報錯(表示沒有社區類型),則需手動創建聲明文件。


解決方案 2:手動創建聲明文件

  1. 在項目中新建一個類型聲明文件(如?src/types/accounting.d.ts)。

  2. 添加以下內容:

    typescript

    復制

    下載

    // accounting.d.ts
    declare module 'accounting' {export function formatNumber(value: number | string,precision?: number,thousand?: string,decimal?: string): string;export function formatMoney(value: number | string,symbol?: string,precision?: number,thousand?: string,decimal?: string,format?: string): string;// 其他方法的聲明...
    }
  3. 在?tsconfig.json?中確保 TypeScript 能找到該文件:

    json

    復制

    下載

    {"compilerOptions": {"typeRoots": ["./node_modules/@types", "./src/types"]}
    }

解決方案 3:快速忽略類型檢查(臨時方案)

在導入語句前添加?// @ts-ignore?注釋:

typescript

復制

下載

// @ts-ignore
import accounting from 'accounting';

注意:這會導致 TypeScript 跳過對該模塊的類型檢查,可能隱藏潛在錯誤。


解決方案 4:擴展全局類型

如果你希望全局聲明類型,在?accounting.d.ts?中添加:

typescript

復制

下載

declare module 'accounting' {const accounting: {formatNumber: (...args: any[]) => string;formatMoney: (...args: any[]) => string;parse: (...args: any[]) => number;// 其他方法...};export default accounting;
}

驗證是否生效

重啟 TypeScript 服務(如 VS Code 的 TypeScript 服務器)后,錯誤應消失。如果仍有問題,檢查:

  1. 聲明文件路徑是否在?tsconfig.json?的?typeRoots?或?include?范圍內。

  2. 聲明文件語法是否正確。


最終建議

  • 優先嘗試?解決方案 2(手動聲明)。

  • 如果需要完整類型支持,可自行完善?accounting.d.ts?中的類型定義。

  • 如果庫使用頻率低,可用?解決方案 3?臨時繞過。

以下是使用?accounting.js?的詳細示例,涵蓋常見場景和功能:


基礎用法示例

1. 格式化數字

typescript

復制

下載

// 引入庫
import accounting from "accounting";// 基本數字格式化
console.log(accounting.formatNumber(9876543.21));       // "9,876,543"
console.log(accounting.formatNumber(1234.5678, 2));     // "1,234.57"(四舍五入)
console.log(accounting.formatNumber(1234.5, 0, " "));   // "1 235"(千位用空格分隔)// 歐洲格式(千位用點,小數用逗號)
console.log(accounting.formatNumber(123456.78, 2, ".", ",")); // "123.456,78"

2. 格式化貨幣

typescript

復制

下載

// 默認美元格式
console.log(accounting.formatMoney(12345.6789));        // "$12,345.68"// 自定義符號和格式
console.log(accounting.formatMoney(-1234.56,"€",         // 符號2,           // 小數位".",         // 千位分隔符",",         // 小數點"%v %s"      // 格式(數值在前,符號在后)
)); // "-1.234,56 €"// 處理大數值(使用字符串避免精度丟失)
console.log(accounting.formatMoney("12345678901234567890.12345")); // "$12,345,678,901,234,567,890.12"

3. 解析貨幣字符串

typescript

復制

下載

// 解析帶符號的字符串
console.log(accounting.parse("£12,345.67"));      // 12345.67
console.log(accounting.parse("1.234,56 €", ",")); // 1234.56(指定小數點逗號)// 解析負數
console.log(accounting.parse("-$5,000.25"));      // -5000.25

4. 格式化多列數據

typescript

復制

下載

const prices = [1234.5, 67890.12, 45.6];
const formattedPrices = accounting.formatColumn(prices, "¥", 2);console.log(formattedPrices);
// 輸出: ["¥1,234.50", "¥67,890.12", "¥45.60"]

全局配置示例

typescript

復制

下載

// 修改全局默認配置(適合歐洲貨幣格式)
accounting.settings = {currency: {symbol: "€",format: "%v %s",   // 數值在前,符號在后decimal: ",",thousand: ".",precision: 2},number: {precision: 2,thousand: " ",decimal: ","}
};// 使用新配置格式化
console.log(accounting.formatMoney(1234.56));     // "1.234,56 €"
console.log(accounting.formatNumber(1234567.89)); // "1 234 567,89"

高級用法示例

1. 自定義負數顯示

typescript

復制

下載

// 用括號包裹負數
const customFormat = accounting.formatMoney(-1234.56, "$", 2, ",", ".", "%s (%v)");
console.log(customFormat); // "$ (1,234.56)"
2. 處理多語言場景

typescript

復制

下載

// 切換為中文人民幣格式
const chineseFormat = accounting.formatMoney(12345.67,"¥",2,",",".","%s%v"
);
console.log(chineseFormat); // "¥12,345.67"
3. 與其他工具結合(如表格渲染)

typescript

復制

下載

// 在 React/Vue 中渲染表格
const data = [{ product: "A", price: 1234.5 },{ product: "B", price: 6789.0 },
];// 表格列格式化
const tableRows = data.map((item) => ({...item,price: accounting.formatMoney(item.price, "$", 2)
}));// 輸出結果:
// [
//   { product: "A", price: "$1,234.50" },
//   { product: "B", price: "$6,789.00" }
// ]

常見問題解決

1. 浮點數精度問題

typescript

復制

下載

// 錯誤:JavaScript 浮點計算問題
console.log(0.1 + 0.2); // 0.30000000000000004// 正確:使用字符串初始化
console.log(accounting.formatMoney("0.1" + "0.2")); // "$0.30"
2. 處理空值或非數字

typescript

復制

下載

// 添加防御性代碼
const safeFormat = (value: any) => {if (isNaN(value)) return "N/A";return accounting.formatMoney(value);
};
console.log(safeFormat("invalid")); // "N/A"

完整代碼示例

typescript

復制

下載

import accounting from "accounting";// 1. 配置全局格式
accounting.settings.currency.symbol = "¥";
accounting.settings.currency.precision = 0;// 2. 格式化價格列表
const prices = [1500, 2500, 98000];
const formattedPrices = accounting.formatColumn(prices);console.log(formattedPrices); // ["¥1,500", "¥2,500", "¥98,000"]// 3. 解析用戶輸入
const userInput = "¥12,345";
const parsedValue = accounting.parse(userInput);
console.log(parsedValue); // 12345// 4. 生成財務報表
const reportData = {total: accounting.formatMoney(120000),tax: accounting.formatMoney(120000 * 0.1),
};
console.log(reportData); // { total: "¥120,000", tax: "¥12,000" }

通過以上示例,你可以快速掌握?accounting.js?的核心功能,適用于財務報表、價格顯示、數據導出等場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83904.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSpeed簡介及加速模型訓練

DeepSpeed是由微軟開發的開源深度學習優化框架&#xff0c;專注于大規模模型的高效訓練與推理。其核心目標是通過系統級優化技術降低顯存占用、提升計算效率&#xff0c;并支持千億級參數的模型訓練。 官網鏈接&#xff1a;deepspeed 訓練代碼下載&#xff1a;git代碼 一、De…

集星獺 | 重塑集成體驗:新版編排重構仿真電商訂單數據入庫

概要介紹 新版服務編排以可視化模式驅動電商訂單入庫流程升級&#xff0c;實現訂單、客戶、庫存、發票、發貨等環節的自動化處理。流程中通過循環節點、判斷邏輯與數據查詢的編排&#xff0c;完成了低代碼構建業務邏輯&#xff0c;極大提升訂單處理效率與業務響應速度。 背景…

AMO——下層RL與上層模仿相結合的自適應運動優化:讓人形行走操作(loco-manipulation)兼顧可行性和動力學約束

前言 自從去年24年Q4&#xff0c;我司「七月在線」側重具身智能的場景落地與定制開發之后 去年Q4&#xff0c;每個月都會進來新的具身需求今年Q1&#xff0c;則每周都會進來新的具身需求Q2的本月起&#xff0c;一周不止一個需求 特別是本周&#xff0c;幾乎每天都有國企、央企…

MATLAB中進行語音信號分析

在MATLAB中進行語音信號分析是一個涉及多個步驟的過程&#xff0c;包括時域和頻域分析、加窗、降噪濾波、端點檢測以及特征提取等。 1. 加載和預覽語音信號 首先&#xff0c;你需要加載一個語音信號文件。MATLAB支持多種音頻文件格式&#xff0c;如.wav。 [y, fs] audiorea…

JWT令牌驗證

一、JWT 驗證方式詳解 JWT&#xff08;JSON Web Token&#xff09;的驗證核心是確保令牌未被篡改且符合業務規則&#xff0c;主要分為以下步驟&#xff1a; 1. 令牌解析與基礎校驗 收到客戶端傳遞的 JWT 后&#xff0c;首先按 . 分割為三部分&#xff1a;Header、Payload、S…

一文講清python、anaconda的安裝以及pycharm創建工程

軟件下載 Pycharm下載地址&#xff1a; Other Versions - PyCharm anaconda下載地址&#xff1a; https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Windows-x86_64.exe 安裝步驟 一、 Python 解釋器的安裝步驟 安裝目錄介紹&#xff1a; 二、 Anaconda 安裝 2.1 安裝步…

Mac如何允許安裝任何來源軟件?

打開系統偏好設置-安全性與隱私&#xff0c;點擊右下角的解鎖按鈕&#xff0c;選擇允許從任何來源。 如果沒有這一選項&#xff0c;請到打開終端&#xff0c;輸入命令行&#xff1a;sudo spctl --master-disable, 輸入命令后回車&#xff0c;輸入電腦的開機密碼后回車。 返回“…

React Flow 中 Minimap 與 Controls 組件使用指南:交互式小地圖與視口控制定制(含代碼示例)

本文為《React Agent&#xff1a;從零開始構建 AI 智能體》專欄系列文章。 專欄地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。項目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代碼示?例與實戰源&#xff09;。完整介紹…

Windows Ubuntu 目錄映射關系

情況一&#xff1a;你是通過 WSL (Windows Subsystem for Linux) 安裝 Ubuntu 這是最常見的情況。如果你在 Microsoft Store 安裝了 “Ubuntu”&#xff0c;默認就是 WSL。 &#x1f4c1; 目錄映射關系如下&#xff1a; 從 Ubuntu&#xff08;WSL&#xff09;訪問 Windows&…

雙指針法高效解決「移除元素」問題

雙指針法高效解決「移除元素」問題 雙指針法高效解決「移除元素」問題一、問題描述二、解法解析&#xff1a;雙指針法1. 核心思想2. 算法步驟3. 執行過程示例 三、關鍵點分析四、復雜度分析五、與其他解法的比較1. 快慢指針法2. 本解法的優勢 六、實際應用場景七、總結 雙指針法…

知識圖譜構架

目錄 知識圖譜構架 一、StanfordNLP 和 spaCy 工具介紹 &#xff08;一&#xff09;StanfordNLP 主要功能 使用示例 &#xff08;二&#xff09;spaCy 主要功能 使用示例 二、CRF 和 BERT 的基本原理和入門 &#xff08;一&#xff09;CRF&#xff08;條件隨機場&…

激光三角測量標定與應用

文章目錄 1&#xff0c;介紹。2&#xff0c;技術原理3&#xff0c;類型。3.1&#xff0c;直射式3.2&#xff0c;斜射式3.3&#xff0c;兩種三角位移傳感器特性的比較 4&#xff0c;什么是光片&#xff1f;5&#xff0c;主要的算子。1&#xff0c;create_sheet_of_light_model2&…

高可用消息隊列實戰:AWS SQS 在分布式系統中的核心解決方案

引言&#xff1a;消息隊列的“不可替代性” 在微服務架構和分布式系統盛行的今天&#xff0c;消息隊列&#xff08;Message Queue&#xff09; 已成為解決系統解耦、流量削峰、異步處理等難題的核心組件。然而&#xff0c;傳統的自建消息隊列&#xff08;如RabbitMQ、Kafka&am…

人工智能核心知識:AI Agent 的四種關鍵設計模式

人工智能核心知識&#xff1a;AI Agent 的四種關鍵設計模式 一、引言 在人工智能領域&#xff0c;AI Agent&#xff08;人工智能代理&#xff09;是實現智能行為和決策的核心實體。它能夠感知環境、做出決策并采取行動以完成特定任務。為了設計高效、靈活且適應性強的 AI Age…

平替BioLegend品牌-Elabscience PE Anti-Mouse Foxp3抗體:流式細胞術中的高效工具,助力免疫細胞分析!”

概述 調節性T細胞&#xff08;Treg&#xff09;在維持免疫耐受和抑制過度免疫反應中發揮關鍵作用&#xff0c;其標志性轉錄因子Foxp3&#xff08;Forkhead box P3&#xff09;是Treg功能研究的重要靶點。Elabscience 推出的抗小鼠Foxp3抗體&#xff08;3G3-E&#xff09;&…

編程日志5.13

鄰接表的基礎代碼 #include<iostream> using namespace std; //鄰接表的類聲明 class Graph {private: //結構體EdgeNode表示圖中的邊結點,包含頂點vertex、權重weight和指向下一個邊結點的指針next struct EdgeNode { int vertex; int weight; …

PowerBI 矩陣實現動態行內容(如前后銷售數據)統計數據,以及過濾同時為0的數據

我們有一張活動表 和 一張銷售表 我們想實現如下的效果&#xff0c;當選擇某個活動時&#xff0c;顯示活動前后3天的銷售對比圖&#xff0c;如下&#xff1a; 實現方法&#xff1a; 1.新建一個表&#xff0c;用于顯示列&#xff1a; 2.新建一個度量值&#xff0c;用SELECTEDVA…

Prompt Tuning:高效微調大模型的新利器

Prompt Tuning(提示調優)是什么 Prompt Tuning(提示調優) 是大模型參數高效微調(Parameter-Efficient Fine-Tuning, PEFT)的重要技術之一,其核心思想是通過優化 連續的提示向量(而非整個模型參數)來適配特定任務。以下是關于 Prompt Tuning 的詳細解析: 一、核心概念…

杰發科技AC7840——如何把結構體數據寫到Dflash中

1. 結構體數據被存放在Pflash中 正常情況下&#xff0c;可以看到全局變量的結構體數據被存放在Pflash中 數字部分存在RAM中 2. 最小編程單位 8字節編程&#xff0c;因此如果結構體存放在Dfalsh中&#xff0c;進行寫操作&#xff0c;需要寫8字節的倍數 第一種辦法&#xff1a;…

CSS 選擇器入門

一、CSS 選擇器基礎&#xff1a;快速掌握核心概念 什么是選擇器&#xff1f; CSS 選擇器就像 “網頁元素的遙控器”&#xff0c;用于定位 HTML 中的特定元素并應用樣式。 /* 結構&#xff1a;選擇器 { 屬性: 值; } */ p { color: red; } /* 選擇所有<p>元素&#xff0c;…