前端金额计算不再翻车:用 decimal.js 彻底解决精度问题
在前端处理金额、汇率、利率等敏感数据时0.1 0.2 ! 0.3这种经典的浮点数精度误差经常导致前后端对账失败。很多同学习惯用Math.floor(amount * 100) / 100来“修复”但这只是掩耳盗铃并不能解决二进制浮点数的本质缺陷。本文将介绍如何使用decimal.js​ 这一神器实现银行级精度的金额计算。一、为什么不能用Math.floor 先看一个经典翻车现场// 期望145 // 实际144.99999999999997 const price 0.145; const result Math.floor(price * 100); console.log(result);原因JavaScript 的Number类型基于 IEEE 754 双精度浮点数在二进制中无法精确表示0.145。price * 100得到的并不是精确的145而是一个非常接近144.999999...的数字Math.floor直接把它砍成了144。结论任何基于原生Number的乘除运算在金额场景下都是不安全的。二、解决方案decimal.jsdecimal.js 是一个用于任意精度十进制算术的库它解决了 JavaScript 浮点数的痛点特别适合金融类应用。1. 安装npm install decimal.js2. 引入import { Decimal } from decimal.js;三、核心用法从创建到计算1. 创建 Decimal 对象关键千万不要直接传入数字字面量否则精度误差在创建阶段就已经产生了。❌错误写法仍有精度风险const num new Decimal(0.145); // 0.145 在传入前已经是近似值 //若接口返回的就是number型也可直接使用只是Decimal无法逆转这种误差只能保证之后的计算没有误差若遇到这种情况可让后端返回字符串即可 decimal.js 无法逆转这个误差它只能保证后续计算不再继续放大误差。 验证一下 const d new Decimal(0.145); console.log(d.toString()); // 很可能不是 0.145✅正确写法推荐// 方式一传入字符串最安全推荐 const num1 new Decimal(0.145); // 方式二传入 Number仅在数据来源无法控制时使用 const num2 new Decimal(price); // 方式三传入整数分 const num3 new Decimal(145);2. 执行精确计算Decimal 对象提供了完整的算术方法返回的都是新的 Decimal 对象。const a new Decimal(0.145); const b new Decimal(0.255); // 加法 const sum a.plus(b); // 0.4 // 减法 const diff a.minus(0.045); // 0.1 // 乘法 const product a.times(b); // 0.036975 // 除法 const quotient a.dividedBy(b); // 0.5686274509803921... //向下取整 a.floor() //截断只保留2位小数 const quotient a.toDecimalPlaces(2, Decimal.ROUND_DOWN) // 将Decimal对象转换为JavaScript原生的Number类型 const result sum.toNumber(); // 还有其他常用的方法如取模、幂运算等

相关新闻

一文搞懂lamp-boot的网关统一鉴权:从原理到实践的完整教程

一文搞懂lamp-boot的网关统一鉴权:从原理到实践的完整教程

一文搞懂lamp-boot的网关统一鉴权:从原理到实践的完整教程 【免费下载链接】lamp-boot lamp-boot 基于jdk21、jdk17、jdk11、jdk8 SpringBoot的前后分离的快速开发平台,其中的可配置的SaaS功能尤其闪耀, 具备RBAC功能、网关统一鉴权、Xss防跨…

2026/10/19 1:00:24 阅读更多 →
图形学渲染管线全解:从顶点到像素

图形学渲染管线全解:从顶点到像素

第一遍:骨架(30 秒版本) 渲染管线 把 3D 顶点数据 变成 屏幕上像素颜色 的一条流水线。[顶点数据 Shader 纹理]↓┌──────────────────┐│ 1. Vertex Shader │ 处理每个顶点(坐标变换)└──────────────────┘↓┌─────────…

2026/10/17 8:32:28 阅读更多 →
【办公类-39-04】批量下载微信收到图片(四)-Python模拟点击下载微信收到的图片

【办公类-39-04】批量下载微信收到图片(四)-Python模拟点击下载微信收到的图片

背景说明 最近做环境,搭档发给我很多图片,需要下载下来,然后插入WORD(一页2张、1页4张) 【办公类-102-01】植物角图片打印(A4竖板一页6张,A4竖版一页2张)-CSDN博客文章浏览阅读456次…

2026/10/18 18:13:51 阅读更多 →

最新新闻

IC设计私有化AI助手实战:Docker+OpenCode+Ollama数字前端综合增强方案(TaoToken统一接入版)

IC设计私有化AI助手实战:Docker+OpenCode+Ollama数字前端综合增强方案(TaoToken统一接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:00:10 阅读更多 →
地表最强?Gemini 2.5Pro发布后多模型实测对比,TaoToken统一Key接入全流程

地表最强?Gemini 2.5Pro发布后多模型实测对比,TaoToken统一Key接入全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:00:10 阅读更多 →
HMM-LSTM融合模型在股票趋势预测中的原理与实战

HMM-LSTM融合模型在股票趋势预测中的原理与实战

简介:本资源是一套面向量化投资与金融时间序列建模学习者的Python实战项目,聚焦股票市场趋势预测这一典型任务,融合隐马尔可夫模型(HMM)与长短期记忆网络(LSTM)的混合建模思想,提供四…

2026/10/19 1:00:10 阅读更多 →
工业时序数据轻量压缩:增量编码与分块位宽自适应实践

工业时序数据轻量压缩:增量编码与分块位宽自适应实践

提到工业数据压缩,很多人的第一反应是上成熟压缩库,或者干脆用通用算法硬压。但真到了现场,你往往会发现另一套逻辑:数据源是一台老式PLC或者传感器采集网关,计算资源有限,实时性要求高,而且数据…

2026/10/19 1:00:10 阅读更多 →
STM32F1与陶晶池USART HMI串口屏:从接线到DMA多指令刷屏实战

STM32F1与陶晶池USART HMI串口屏:从接线到DMA多指令刷屏实战

简介:面向嵌入式开发者的陶晶池USART HMI串口屏与STM32F1通信详解资源包,聚焦STM32F103与串口屏的异步串行通信实现。内容覆盖USART波特率计算与USART_BRR寄存器配置、数据帧格式设定、TXE/RXNE标志处理及中断收发机制,并附有完整通信程序示例…

2026/10/19 0:59:10 阅读更多 →
Postman接口测试从入门到自动化实战指南

Postman接口测试从入门到自动化实战指南

1. 准备工作:安装、界面与第一个请求1.1 为什么是Postman,而不是其他工具先聊点实际的。我在测试岗摸爬滚手这几年,见过不少团队在接口测试工具上的纠结史:有人用命令行curl一把梭,有人用浏览器开发者工具手动拼请求&a…

2026/10/19 0:58:09 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →