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

我有一个浮点型

var num = 9.963407954080194743

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

问ChatGPT问题得以解决:

js 浮点位数超过17位乘以10^18,精度丢失问题_第1张图片

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

js 浮点位数超过17位乘以10^18,精度丢失问题_第2张图片

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

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

你可能感兴趣的:(javascript,开发语言)