JS中BigInt的使用

news2024/9/24 9:19:41

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 = 0
	let res = ''
	for (let i = maxLen - 1; i >= 0; i--) {
		let sum = parseInt(a[i]) + parseInt(b[i]) + f
		f = 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 = 0
	for (let k = arr.length - 1; k >= 0; k--) {
		let sum = arr[k] + c
		arr[k] = sum % 10
		c = Math.floor(sum / 10)
	}
	if (c) {
		arr.unshift(c)
	}
	return arr.join('')
}
console.log(bigCheng('3342', '3242'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊小家电出口美国、欧盟、日本需要做什么认证?

海关总署统计数据显示&#xff0c;2023年1-6月&#xff0c;中国家电出口172893.1万台&#xff0c;同比增长1.4%&#xff0c;出口额2967亿元&#xff0c;同比增长5.2%。据奥维云网数据显示&#xff0c;2023年1-6月厨房小家电&#xff08;包含品类&#xff1a;咖啡机、电饭煲、电…

Python脚本批量造数据、跑定时任务协助测试

目录 批量造数据 结合pythonpytestfixture 实现定时任务接口调用 目录结构 定时任务 批量造数据 连接Mysql的信息 1 import pymysql2 # 数据库连接信息3 # 多个库要有多个conn4 conn pymysql.connect(5 host"主机",6 user"用户名",7 pas…

【Redis】Redis 的学习教程(十)之使用 Redis 实现消息队列

消息队列需要满足的要求&#xff1a; 顺序一致&#xff1a;要保证消息发送的顺序和消费的顺序是一致的&#xff0c;不一致的话可能会导致业务上的错误消息确认机制&#xff1a;对于一个已经被消费的消息(已经收到ACK)不能再次被消费消息持久化&#xff1a;要具有持久化的能力&…

ccfcsp9.17

ccf csp第二题前缀和优化 n个ti变化 其中格式是 1 ti或者2 ti 分别表示拉长ti和逆时针旋转ti m个查询 其中格式是 ti到tj的变化(be en) x y初始坐标 输出格式 每个查询x y之间空格&#xff0c;查询\n 时间复杂度On #include<stdio.h> #include<stdlib.h> #includ…

人民日报发文祝贺,这位作者是藏不住了!

近日&#xff0c;人民日报特地发文祝贺一位90后短视频博主任大学副教授&#xff01; 这是哪位短视频博主这么有排面&#xff0c;竟然被人民日报专门发文祝贺呢&#xff1f; 她就是短视频科普“弦论”走红的周思益&#xff01; 同时也是《弦论小女孩的相对论课》一书的作者~~…

如何防止公司代码泄露(如何防止员工拷贝代码)

随着互联网的发展&#xff0c;越来越多的企业开始注重知识产权的保护&#xff0c;其中源代码是企业的重要资产之一。然而&#xff0c;一些员工可能会通过各种手段获取企业的源代码&#xff0c;这对企业的竞争力和商业机密构成了威胁。那么&#xff0c;企业应该如何防止员工拷贝…

文件夹高效改名,批量设置文件夹仅显示编号无名称的方法“

在数字化世界中&#xff0c;文件夹的命名和编号管理对于提高工作效率和保持文件组织的条理性起着至关重要的作用。你是否曾经在杂乱无章的文件系统中迷失&#xff0c;或者在寻找重要文件时感到困惑&#xff1f;如果你回答是肯定的&#xff0c;那么是时候采取一种更有效的文件夹…

亚马逊美国站小家电UL60335-1测试报告办理

有很多做亚马逊平台的客户反映产品因为没有UL认证&#xff0c;被下架了&#xff0c;怎么办&#xff1f; 因为大家都知道UL认证并没有那么好拿&#xff0c;随便一个产品做下来费用10W&#xff0c;一年需要对工厂进行4次审核&#xff0c;而且非常严格&#xff0c;普通工厂根本没…

Redis学习 - Tp6配置并使用redis图文详解 小皮面板(三)

这篇文章主要介绍了Thinkphp6 配置并使用redis的方法,结合实例形式详细分析了Redis的安装、配置以及thinkphp6操作Redis的基本技巧,需要的朋友可以参考下 一、安装redis ThinkPHP内置支持的缓存类型包括file、memcache、wincache、sqlite。ThinkPHP默认使用自带的采用think\Ca…

在MySQL中使用VARCHAR字段进行日期筛选

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

VM ware中Linux连网

在公司时,想搭建一下docker,结果发现连不上网,那就自己动手操作一下 一、联网配置 1.1 ping 发现ping不通&#xff0c;说明虚拟机此时无法与外界网络互连&#xff0c;需要修改设置联网 1.2 ifconfig查看网络配置 注意第一行显示的是ens33还是ens32,后面配置会用到 1.3 获取ro…

详解API接口如何安全的传输数据

概述 API接口的安全传输是确保数据在API请求和响应之间的传输过程中不被截获、篡改或泄露的重要步骤。以下是一些用于增强API接口安全传输的常见技术和最佳实践&#xff1a; 使用HTTPS&#xff1a;使用HTTPS协议而不是HTTP&#xff0c;以确保数据在传输过程中的安全性。HTTPS使…

入户式防汛报警器是什么?

入户式防汛报警器是一款能够和雨量气象监测设备搭配的仪器&#xff0c;是集实时监测、信息显示、多时段声光报警功能的监测报警设备&#xff0c;支持不同级别的声光报警。 当监测要素超过设定的危险警戒值时设备发出报警声&#xff0c;提醒居民做好防汛&#xff08;转移&#…

无所不知的Mac效率神器 Alfred 4,一顶神器的小帽子!

肯定很多人在工作、学习或者写东西的时候&#xff0c;总想着怎样可以提高效率&#xff0c;节约时间。现在每天用得最多的电脑&#xff0c;怎样才能够让工作效率更高呢&#xff1f;带着这样的一个目的&#xff0c;使用了很多的小工具&#xff0c;有些可以简化工作&#xff0c;有…

JDK、JRE和JVM

JDK&#xff08; java 开发工具 &#xff09;&#xff1a; Java Develpment Kit&#xff0c;主要包含了工具程序与API、JRE JRE&#xff08;java运行时环境 &#xff09;&#xff1a; Java Runtime Environment&#xff0c;主要包含了JavaSE核心类库和Java虚拟机&#xff08;JV…

深入浅出学Verilog--数字电路基础内容

什么是数字系统&#xff1f; 数字系统是一种表示数值的方式。它是一组使我们能够计数、测量和计算数值量的规则、符号和过程。最常见的数字系统是使用数字 0-9 的十进制系统和仅使用 0 和 1 的二进制系统。其他数字系统包括八进制、十六进制和罗马数字。每个数字系统都有其独特…

URL 路径中包含百分号需要在 Swift 中的特殊处理

概览 在 Swift 中访问或处理 URL 路径常常遇见路径中包含百分号(%)的情况,此时我们有必要做特殊处理,否则 URL 的请求和解析可能会发生错误。 如果 URL 路径中包含用百分号前缀表示的特殊字符,在之后的路径解析中可能会出现意想不到的问题。 在本篇博文中,您将学到以下…

数字展厅如何设计与策划,一文了解搭建数字展厅要哪些步骤

引言&#xff1a; 数字展厅&#xff0c;作为一种现代化的宣传工具&#xff0c;已经在商业界崭露头角。我们将了解什么是数字展厅&#xff0c;然后探讨数字展厅设计的关键要素&#xff0c;接着讲述数字展厅策划的核心原则&#xff0c;最后详细介绍数字展厅的搭建过程。 一&…

C# OpenVino Yolov8 Cls 分类

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…

GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术教程

详情点击公众号链接&#xff1a;GMS地下水数值模拟及溶质&#xff08;包含反应性溶质&#xff09;运移模拟技术教程 前言 GMS三维地质结构建模 GMS地下水流数值模拟 GMS溶质运移数值模拟与反应性溶质运移模 第一地下水数值模拟理论模块 1.1 地下水渗流运动方程 1.2 地下水数…