关于javascript数字精度丢失的解决办法

分析原因

众所周知,在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,主要原因是计算机将数据存储为二进制所引起的,所以这并不是javascript存在的缺陷,而在其他语言中也有类似的问题。

例如下面的例子:

我们在计算 0.1 + 0.1 的到的结果是 0.2,但是计算 0.1 + 0.2 的结果并不是0.3,而是0.30000000000000004

我们在计算 1.2 - 1 的结果并不是0.2,而是0.19999999999999996

不过这并不是JavaScript独有的,其他编程语言也会存在同样的问题。

解决办法:我们可以使用toPrecision凑整后再使用parentFloat,比如计算1.6385000000000001

bash 复制代码
let parse = parseFloat(1.6385000000000001.toPrecision(12))
console.log(parse === 1.6385) // true

接下来我们封装成方法使用

bash 复制代码
/**
	@param: 浮点小数
	@precise: 转换后有几位数
*/
function precision(num, precise) {
  return parseFloat(num.toPrecision(precise));
}

precision(1.6385000000000001, 1) // 2
precision(1.6385000000000001, 2) // 1.6
precision(1.6385000000000001, 3) // 1.64

其原理就相当一数学中的四舍五入。

相关推荐
小白学大数据9 分钟前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
2503_9284115633 分钟前
11.24 Vue-组件2
前端·javascript·vue.js
SEO_juper1 小时前
别再纠结LLMs.txt了!它背后的真相与最佳使用场景,一文讲透。
开发语言·ai·php·数字营销
g***B7381 小时前
JavaScript在Node.js中的模块系统
开发语言·javascript·node.js
烤麻辣烫1 小时前
黑马程序员大事件后端概览(表现效果升级版)
java·开发语言·学习·spring·intellij-idea
思密吗喽1 小时前
宠物商城系统
java·开发语言·vue·毕业设计·springboot·课程设计·宠物
csbysj20201 小时前
Lua 函数
开发语言
头发还在的女程序员2 小时前
三天搞定招聘系统!附完整源码
开发语言·python
温轻舟2 小时前
Python自动办公工具06-设置Word文档中表格的格式
开发语言·python·word·自动化工具·温轻舟
p***c9492 小时前
PHP在电商中的电商系统
开发语言·php