js大数相加出现精度丢失、运算错误的问题

 更新时间:2023年08月06日 10:47:10   投稿:yin  
js中数字类型长度达到16位时,进行加减乘除运算,会出现精度丢失,运算结果错误的问题,本文讲述精度丢失的原因及解决办法

js中数字类型长度达到16位时,进行加减乘除运算,会出现精度丢失,运算结果错误的问题,本文讲述精度丢失的原因及解决办法。

数字类型Number转换超过16位精度丢失

Number转换16位正常;Number转换17位精度丢失,16位以后的数字都会转换成0。

网上资料说:js的number类型有个最大安全值,即2的53次方(9007199254740992),超过这个值就会出现精度丢失的问题。

上面这个说法还是不准确的,应该是超过16位出现精度丢失,16位以后的数字都会转换成0。

解决方案

1、使用BigInt 转换数字

BigInt是一种内置对象,它提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript中可以用Number表示的最大数字。BigInt 可以表示任意大的整数

BigInt转换后要进行加减乘除运算的话,另一个也必须要经过BigInt 转换,示例如下

let str = '1161453901956706780';
let num= BigInt(str) + BigInt(1);
console.log(String(num));
console.log(String(num).split('n')[0]);

2、转换成字符串,自定义函数

自定义函数sumBigNumber(a, b),注意这里的参数a和b都是字符串。

function sumBigNumber(a, b) {
    var res = '',temp = 0;
    a = a.split('');
    b = b.split('');
    while (a.length || b.length || temp) {
        temp += ~~a.pop() + ~~b.pop();
        res = (temp % 10) + res;
        temp = temp > 9;
    }
    return res.replace(/^0+/, '');
}

到此这篇关于js大数相加出现精度丢失、运算错误的问题的文章就介绍到这了,更多相关js大数相加精度丢失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序实现多行文字滚动

    微信小程序实现多行文字滚动

    这篇文章主要为大家详细介绍了微信小程序实现多行文字滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • javascript每日必学之多态

    javascript每日必学之多态

    javascript每日必学之多态,介绍了有关多态的相关内容,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 小程序实现多个选项卡切换

    小程序实现多个选项卡切换

    这篇文章主要为大家详细介绍了小程序实现多个选项卡切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Javascript 继承机制的实现

    Javascript 继承机制的实现

    要用ECMAScript实现继承机制,首先从基类入手。所有开发者定义的类都可作为基类。出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击。
    2009-08-08
  • 浅析JS中对函数function的理解(基础篇)

    浅析JS中对函数function的理解(基础篇)

    我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法。下面给大家谈下对JS中函数function的理解,一起看看吧
    2016-10-10
  • JS定义函数的几种常用方法小结

    JS定义函数的几种常用方法小结

    这篇文章主要介绍了JS定义函数的几种常用方法,结合实例形式总结分析了javascript函数表达式、Lambda 表达式、对象方法等常见函数定义操作技巧,需要的朋友可以参考下
    2019-05-05
  • 获取3个数组不重复的值的具体实现

    获取3个数组不重复的值的具体实现

    先用concat拼接数组 ,再使用一个对象、一个新数组(用于存放不重复的数组)具体实现如下,感兴趣的朋友可以参考
    2013-12-12
  • javascript实现固定侧边栏

    javascript实现固定侧边栏

    这篇文章主要为大家详细介绍了javascript实现固定侧边栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 获取table中的rowIndex和cellIndex

    获取table中的rowIndex和cellIndex

    获取table中的rowIndex和cellIndex...
    2006-12-12
  • javascript实现滚动效果的数字时钟实例

    javascript实现滚动效果的数字时钟实例

    这篇文章主要是介绍使用javascript来实现数字时钟滚动的效果,非常实用,有需要的朋友们可以来参考学习。
    2016-07-07

最新评论