accounting.js 是一个用于格式化数字、货币和金额的轻量级库,特别适合财务和会计应用。以下是其详细使用说明:
安装与引入
-  通过 npm 安装: bash 复制 下载 npm install accounting 引入: javascript 复制 下载 const accounting = require('accounting');
-  直接引入脚本: 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"); // 正确解析字符串大数
注意事项
-  数值精度:JavaScript 浮点数计算可能存在精度问题,建议对极大/极小数值使用字符串形式。 
-  国际化:根据地区调整 thousand、decimal和symbol,如欧洲格式:javascript 复制 下载 accounting.formatMoney(1234.56, "€", 2, ".", ",", "%v %s"); // "1.234,56 €" 
-  多列对齐:使用 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:手动创建声明文件
-  在项目中新建一个类型声明文件(如 src/types/accounting.d.ts)。
-  添加以下内容: 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;// 其他方法的声明... }
-  在 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 服务器)后,错误应消失。如果仍有问题,检查:
-  声明文件路径是否在 tsconfig.json的typeRoots或include范围内。
-  声明文件语法是否正确。 
最终建议
-  优先尝试 解决方案 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 的核心功能,适用于财务报表、价格显示、数据导出等场景。