关于JS中parseFloat的精确计算问题

记一次关于计算金额精度问题

分析出现问题的情况

校验两个金额的值大于,小于,等于的时候由于精度失真导致,没法得到想要结果 ;eg 1005.05 元与 1004.999996 元这种失精度 ;其实我们需要的是精确到两位有效数字元就可以了,但是在计算的过程中使用parseFloat()函数会出现这种1004.999996 数据

parseFloat函数介绍

介绍: parseFloat() 函数可解析一个字符串,并返回一个浮点数。
它的语法是:parseFloat(string);
注释:1 只有字符串中的第一个数字会被返回,开头和结尾的空格是允许的。
2 如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN,如果只想解析数字的整数部分,请使用 parseInt() 方法。

最近总结解决的方法

1使用toFixed函数来精确

1.1toFixed函数定义和用法
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
语法
NumberObject.toFixed(num)
参数 描述
num 必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。
注:
返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。

抛出
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。

当调用该方法的对象不是 Number 时抛出 TypeError 异常。
1.2使用
var amount = parseFloat(Sum+Sum2 ).toFixed(4);//四舍五入保留小数点后四位

2使用扩大一定的倍数,对结果在缩小这个倍数
var num1=parseFloat(“234432.9”)*1000000000000;
var num2=parseFloat(“0.2”)*1000000000000;
var num3=(num1-num2)/1000000000000;
结果为 234432.7

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值