当前位置: 首页 > news >正文

js关于number类型的计算问题

js中关于number类型的计算

因:在js中,number类型是用于表示数值的基本类型,它遵循 IEEE 754 双精度浮点数(64 位)标准。这导致在某些计算中可能出现精度问题。

例:console.log(0.1 + 0.2); // 0.30000000000000004

我这里出于个人习惯,使用三方库big.js来解决精度问题

npm install big.js
import Big from 'big.js';const a = new Big(0.1);
const b = new Big(0.2);
const result = a.plus(b);console.log(result.toString()); // "0.3" ✅

顺便贴一下常见用法示例,便于我日后追溯

import Big from 'big.js';// 创建 Big 实例
const a = new Big(0.1);
const b = new Big(0.2);// 加法
console.log(a.plus(b).toString()); // "0.3"// 减法
console.log(b.minus(a).toString()); // "0.1"// 乘法
console.log(a.times(b).toString()); // "0.02"// 除法
console.log(b.div(a).toString()); // "2"// 比较
console.log(a.lt(b)); // true(小于)
console.log(a.eq(b)); // false(等于)

在项目过程中,还有很多实际问题需要考虑,比如:new Big中传入了非法值,(undefined,null,NaN,‘字符串’) 都会出现Invalid number报错。

尝试使用方法

  1. 使用??过滤一下?
b.minus(a ?? 0) // 有很大问题,只能过滤null与undefined,并没有过滤'' 还是会报错,不可取
  1. 使用??‘’
b.minus(((a ?? '') === '') ? 0 : a) // 过滤掉了'',算是解决了大部分问题
  1. 使用函数封装
function safeBig(val: any): Big {const num = Number(String(val).trim()) // 这里有个知识点,Number不会抛错,只会返回NaNreturn isFinite(num) ? new Big(num) : new Big(0)
}// 计算
safeBig(a).minus(safeBig(b))
http://www.dtcms.com/a/192003.html

相关文章:

  • RabbitMQ工作流程及使用方法
  • c/c++消息队列库RabbitMQ的使用
  • 动态库和静态库的区别
  • 以项目的方式学QT开发(二)
  • 哲学物理:太极图和莫比乌斯环有什么关系?
  • OkHttp用法-Java调用http服务
  • 【Linux系列】Linux 系统下 SSD 磁盘识别
  • 【油藏地球物理正演软件ColchisFM】基于数据驱动的油藏参数叠前地震反演研究进展
  • 操作系统学习笔记第3章 内存管理(灰灰题库)
  • javaSE.QueueDeque
  • python打卡打印26
  • Git 常用命令详解
  • 进程替换讲解
  • 【day01】 Chroma 核心操作流程
  • IT系统的基础设施:流量治理、服务治理、资源治理,还有数据治理。
  • 部署安装jenkins.war(2.508)
  • 练习小项目2:今日幸运颜色生成器
  • 【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
  • 在Angular中使用Leaflet构建地图应用
  • 一招解决Tailwindcss4.x与其他库样式冲突问题
  • Scrapy框架下地图爬虫的进度监控与优化策略
  • 16.2 VDMA视频转发实验之模拟源
  • [Java实战]Spring Boot 3实现 RBAC 权限控制(二十五)
  • C# 实现雪花算法(Snowflake Algorithm)详解与应用
  • C++篇——多态
  • 知从科技闪耀2025上海车展:以创新驱动未来出行新篇章
  • redis解决常见的秒杀问题
  • STL?list!!!
  • “傅里叶变换算法”来检测纸箱变形的简单示例
  • 2025认证杯第二阶段数学建模B题:谣言在社交网络上的传播思路+模型+代码