js 浮点位数超过17位乘以10^18,精度丢失问题

文章讲述了在处理浮点型数字与大数运算时遇到的精度丢失问题。使用big.js库解决了9.963407954080194743乘以10^18的结果不精确的问题,但后续运算中,将科学计数法表示的数转换为BN时出现错误。解决方案是使用toFixed确保结果为无小数部分的整数。
摘要由CSDN通过智能技术生成

我有一个浮点型

var num = 9.963407954080194743

用num * (10 ** 18) 计算得出的结果是9963407954080195000, 但是我想要得到的结果是9963407954080194743

问ChatGPT问题得以解决:

GPT提供的代码:

import Big from 'big.js';

const num1 = new Big('9.963407954080194743');
const num2 = new Big('10').pow(18);

const result = num1.times(num2);
console.log(result.toString()); // 输出: 9963407954080194743

上面的问题解决了,但是我继续运行代码的时候又遇到了错误,报错的代码如下:

const scientificNumber = "299200.450137044752492962";
const num = new Big(scientificNumber);
const result = num.times(10 ** 18)
console.log(toBN(result));

报错如下: 

 报错原因:num.times(10 ** 18)相乘以后得出的结果是用科学计数法表示的值2.99200450137044752492962e+23,toBN(result),如果result不是整数形式的值就会报错

解决方法:const result = num.times().toFixed()

因为相乘以后都是整数,没有小数位数,所以得到出的结果会是 299200450137044752492962

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值