数字格式化库 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.mzph.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;…