当前位置: 首页 > news >正文

JS中BigInt的使用

JS中BigInt的使用

BigInt是一种内置对象,它提供了一种方法来表示大于2^53 - 1的整数,通俗来讲就是提供了一种可以表示任意大整数的方法,当我们使用Number来表示一个超过了2 ^53 - 1的整数的时候,会出错。所以此时我们需要使用BigInt。

描述

当我们在一个整数数字后面加n就可以定义一个BigInt,如:10n 或者使用BigInt()函数

const test1 = 100n;
const test2 = BigInt(200)

当我们使用typeof判断时,返回的也是bigint

typeof 1n === 'bigint'
typeof BigInt('1') === 'bigint'

在这里插入图片描述

注意

对于BigInt不能与Math方法一起使用

let a = 2n;
let b = 3n;
console.log(Math.floor(b / a))

在这里插入图片描述
BigInt在做除法的时候,天然会向下取整,所以直接相除就好

let a = 2n;
let b = 3n;
console.log(b / a)

在这里插入图片描述
下面还有一个场景可能会用到
当我们从输入获取到的字符串特别长的时候,使用number放进数组中,会报错,我们可以使用bigint

let str = '12 111 32 45 99 32 33';
let arr = str.split(' ').map(BigInt);
console.log(arr)

在这里插入图片描述
那如果我想要对其进行排序呢?我们通常的排序方式是使用sort,并使用如下方式升序排列

let arr = [1,2,3,432,12,5,6];
console.log(arr.sort((a, b) => a - b))

在这里插入图片描述
那对于bigInt的数组,也用这种方式可以吗?答案是可以,但是不可以使用简写方式

let str = '12 111 32 45 99 32 33';
let arr = str.split(' ').map(BigInt);
console.log(arr.sort((a, b) => a - b))

在这里插入图片描述
我们要完整的写出sort中的函数
升序

let str = '12 111 32 45 99 32 33';
let arr = str.split(' ').map(BigInt);
console.log(arr.sort((a, b) => {if(a < b){return -1}
}))

在这里插入图片描述
降序

let str = '12 111 32 45 99 32 33';
let arr = str.split(' ').map(BigInt);
console.log(arr.sort((a, b) => {if(a > b){return -1}
}))

在这里插入图片描述

常见问题

如果由两个特别长的字符串,如何在不使用bigInt的情况下 对其进行相加与相乘
相加

function bigSum(a, b) {let maxLen = Math.max(a.length, b.length)a = a.padStart(maxLen, '0')b = b.padStart(maxLen, '0')f = 0let res = ''for (let i = maxLen - 1; i >= 0; i--) {let sum = parseInt(a[i]) + parseInt(b[i]) + ff = Math.floor(sum / 10)res = sum % 10 + res}if (f) {res = '1' + res}return res
}
console.log(bigSum('3342', '3242'))

相乘

function bigCheng(a, b) {if (a === '0' || b === '0') return '0'let arr = []for (let i = a.length - 1; i >= 0; i--) {for (let j = b.length - 1; j >= 0; j--) {arr[i + j] = (arr[i + j] || 0) + a[i] * b[j]}}let c = 0for (let k = arr.length - 1; k >= 0; k--) {let sum = arr[k] + carr[k] = sum % 10c = Math.floor(sum / 10)}if (c) {arr.unshift(c)}return arr.join('')
}
console.log(bigCheng('3342', '3242'))
http://www.lryc.cn/news/169349.html

相关文章:

  • 你的第1个 Unity 游戏!!!
  • 炫云云渲染3ds max效果图渲染教程
  • Java中数组array和列表list相互转换
  • 【JavaSE笔记】数据类型与变量
  • VR全景智慧文旅解决方案,助力文旅产业转型升级
  • 采用cv2和默认的人脸识别分类器实现人脸检测功能
  • C# 实现迷宫游戏
  • chales 重写/断点/映射/手机代理/其他主机代理
  • django添加数据库字段进行数据迁移
  • flink1.15.0消费kafka 报错 The coordinator is not available.
  • 2023华为杯研究生数学建模F题思路模型代码(9.22早第一时间更新)
  • [k8s] pod的创建过程
  • [网鼎杯 2020 朱雀组]phpweb call_user_func()
  • 电脑怎么取消磁盘分区?
  • Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建
  • 【JVM】Java类的加载机制!
  • Postman使用_接口导入导出
  • linux下centos7升级python版本
  • Python空值None的意义
  • 什么是无线传输技术,如Wi-Fi、蓝牙和NFC的特点和应用场景
  • RUST 每日一省:全局变量
  • Arduino与Proteus仿真-WiFi网络仿真环境搭建
  • 陪诊系统|陪诊软件革新医疗体验
  • 零基础Linux_5(开发工具_上)yum和vim和gcc/g++和gdb
  • mysql建表的时候设置默认值为null会对存储和索引有影响吗?
  • 通过API爬取到的淘宝商品详情数据展示(api测试入口)
  • 蓝桥杯2023年第十四届省赛真题-买瓜--题解
  • python萌新爬虫学习笔记【建议收藏】
  • 网络编程——基础知识
  • flutter聊天界面-TextField输入框实现@功能等匹配正则表达式展示高亮功能