关于JS浮点数运算不精确的原因和解决方案

关于JS浮点数运算不精确的原因和解决方案
背景
之前在一个项目中,涉及到了金额,协议组定的标准是按照分的单位进行传递的,但是交互上,web页面中为了更友好的体验,是使用的元作为单位的,这个时候就需要转换一下单位。

本来是很简单的一个转化的需求,在和后端联调的时候发现,保存的时候返回了参数错误,原因就是由于js浮点数精度带来的影响,导致保存的时候保存的位数特别多。

之前的开发过程中,对这个不精确的问题只是了解,有问题了就parseInt一下,但没有去细想过要怎么解决,所以今天整理了一下之后分享一下,先了解下原因,再看下怎么解决和规避

问题
输入金额 0.55,我传递之后应该乘 100 后下发,正常来说应该传的是55,但是实际上,由于精度丢失,最后的结果如下图所示:
在这里插入图片描述

那追根溯源,到底为什么会产生精度丢失的问题呢?

计算机底层只有0 和 1, 所以所有的运算最后实际上都是二进制运算。十进制整数利用辗转相除的方法可以准确地转换为二进制数,但浮点数呢?

先看下面一张图,是关于IEEE 754标准(IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号):

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值