数字格式化库 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 的核心功能,适用于财务报表、价格显示、数据导出等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值