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

你知道Java中的BigInteger类和BigDecimal类吗?

BigInteger和BigDecimal:

我们在学习JavaSE基础的时候学习过int和double,前者是整形,后者是双精度浮点数,但它们是有最大值的,也就是说,他两并不支持无限大的数字。

其范围如下所示:

在这里插入图片描述
在这里插入图片描述

因此对于特别大的数字,Java为我们提供了两个类可用来操作,分别是BigInteger[支持任意长度的整数]BigDecimal[支持任意长度的浮点数],理论上可以存储无限长的数字只要你计算机的内存足够

创建:

new BigXXX():

public static void main(String[] args) {//注意传递的参数是字符串而不是整数或者浮点数BigInteger bigInteger=new BigInteger("111111111111111111111111111111111");System.out.println(bigInteger);BigDecimal bigDecimal=new BigDecimal("1221345676867564534.123453678675645342");System.out.println(bigDecimal);}

输出:

111111111111111111111111111111111
1221345676867564534.123453678675645342

BigXXX.ValueOf():

 public static void main(String[] args) {BigDecimal bigDecimal=BigDecimal.valueOf(12213456768678974.12);BigInteger bigInteger=BigInteger.valueOf(111111111111111L);System.out.println(bigInteger);System.out.println(bigDecimal);}

输出:

111111111111111
12213456768678974

为什么这里打印出来的bigDecimal少了我们提供的一部分呢?

问题不在BigDecimal,而在ValueOf,我们提供的是double类型的,而double类型的长度一般在15-17位因此17位以后得会被略掉因此比较好的办法还是使用构造方法的形式创建.

Scanner对象.BigXXX():

public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println(scanner.nextBigInteger());System.out.println(scanner.nextBigDecimal());}

输出:

111111111111111
111111111111111
111111111111111.32145
111111111111111.32145

方法:

add():相加

substract():相减

multiply:相乘

divide:相除

remainder():取余数

max():取最大值

min():取最小值

注意:调用BigInteger的上述运算方法时,不能直接传入整形数字,原因如下所示:

查看上述方法的源码:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以相加为例:

BigInteger bigInteger1=new BigInteger("741258963");BigInteger bigInteger3=bigInteger1.add(BigInteger.valueOf(2));System.out.println(bigInteger3);

输出:

741258965

divideAndRemainder():得到商和余数

 public static void main(String[] args) {BigInteger bigInteger1=new BigInteger("741258963");BigInteger bigInteger2=new BigInteger("457123698");BigInteger[] bigInteger3=bigInteger1.divideAndRemainder(bigInteger2);//得到商System.out.println(bigInteger3[0]);//得到余数System.out.println(bigInteger3[1]);}

注意该方法的返回值是一个BigInteger[],数组中第一个数字是商,第二个数字是余数

在这里插入图片描述

compareTo():比较大小

public static void main(String[] args) {BigInteger bigInteger1=new BigInteger("741258963");BigInteger bigInteger2=new BigInteger("2");int result=bigInteger1.compareTo(bigInteger2);System.out.println(result);}

输出:

bigInteger1大于bigInteger2,成立返回1,否则返回-1,相等返回0

1

在这里插入图片描述

intValue():转换成int型和doubleValue():转换成double型

public static void main(String[] args) {BigInteger bigInteger2=new BigInteger("2");int num1=  bigInteger2.intValue();Double num2=  bigInteger2.doubleValue();System.out.println(num1);System.out.println(num2);}

输出:

2
2.0

上述方法对于BigDecimal对象同样适用,这里就不过多举例。

注意:BigDecimal对象的divide需要注意的地方如下所示

   public static void main(String[] args) {BigDecimal bigDecimal=new BigDecimal("3.14159");//未做任何处理BigDecimal bigDecimal1=bigDecimal.divide(BigDecimal.valueOf(2));System.out.println(bigDecimal1);//RoundingMode.HALF_UP->四舍五入BigDecimal bigDecimal2=bigDecimal.divide(BigDecimal.valueOf(2),RoundingMode.HALF_UP);System.out.println(bigDecimal2);//RoundingMode.UP->向上取整BigDecimal bigDecimal3=bigDecimal.divide(BigDecimal.valueOf(2),RoundingMode.UP);System.out.println(bigDecimal3);//RoundingMode.DOWN->向下取整BigDecimal bigDecimal4=bigDecimal.divide(BigDecimal.valueOf(2),RoundingMode.DOWN);System.out.println(bigDecimal4);}

输出:

默认保留和提供的bigDecimal对象相同的位数

1.570795
1.57080
1.57080
1.57079

实现进制之间的转换:

public static void main(String[] args) {//二进制转化为10进制int num=Integer.parseInt("001",2);System.out.println(num);//十六进制转化为10进制int num1=Integer.parseInt("D",16);System.out.println(num1);//八进制转化为10进制int num2=Integer.parseInt("00012",8);System.out.println(num2);}

输出如下所示:

1
13
10

但是当数据过大的情况下就会抛出异常:

 public static void main(String[] args) {int num3=Integer.parseInt("7418529633217965412369874",16);System.out.println(num3);}

输出如下所示:

在这里插入图片描述

那么我们可以使用大数类解决这个问题:

 public static void main(String[] args) {BigInteger bigInteger=new BigInteger("ABCDEF123",16);System.out.println(bigInteger);}

输出如下所示:

46118400291

相关文章:

你知道Java中的BigInteger类和BigDecimal类吗?

BigInteger和BigDecimal: 我们在学习JavaSE基础的时候学习过int和double,前者是整形,后者是双精度浮点数,但它们是有最大值的,也就是说,他两并不支持无限大的数字。 其范围如下所示: 因此对于…...

33.搜索旋转排序数组

​​题目来源: leetcode题目,网址:33. 搜索旋转排序数组 - 力扣(LeetCode) 解题思路: 在二分查找时,分情况讨论即可。通过与第一个元素和最后一个元素的比较来获得 mid 处于第一个序列中还是第…...

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: https://download.csdn.net/download/weixin_41697242/88623091 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传…...

Redis持久化AOF详解

基础面试题 什么是AOF AOF(Append-Only File)用于将Redis服务器收到的写操作追加到日志文件,通过该机制可以保证服务器重启后依然可以依靠日志文件恢复数据。 它的工作过程大抵分为以下几步: 收到客户端的写入命令(例如SET、DE…...

基于ssm网络安全宣传网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网络安全宣传网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...

机器人行业数据闭环实践:从对象存储到 JuiceFS

JuiceFS 社区聚集了来自各行各业的前沿科技用户。本次分享的案例来源于刻行,一家商用服务机器人领域科技企业。 商用服务机器人指的是我们日常生活中常见的清洁机器人、送餐机器人、仓库机器人等。刻行采用 JuiceFS 来弥补对象存储性能不足等问题。 值得一提的是&am…...

墒情监测FDS-400 土壤温湿电导率盐分传感器

墒情监测FDS-400 土壤温湿电导率盐分传感器产品概述 土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成,解决铂电阻因自身特点导入的测量误差,变送器内有零漂电路…...

QT -CloudViewer工具

QT -CloudViewer工具 一、演示效果二、关键程序三、程序下载 一、演示效果 二、关键程序 void CloudViewer::doOpen(const QStringList& filePathList) {// Open point cloud file one by onefor (int i 0; i ! filePathList.size(); i) {timeStart(); // time startmycl…...

GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC。这篇篇幅会比较短。重点在于上一章对的补充。 文章目录 RPC包的概念使用RPC包服务器代码分析如何实现的?总结Server还提供了两个注册服务的方法 客户端代码分析如何实现的?如何异步…...

uniapp x 相比于其他的开发系统框架怎么样?

首先我们要知道niapp这是一种基于Vue.js开发的跨平台应用框架,可以将同一套代码同时运行在多个平台上,包括iOS、Android、H5等。相比其他开发系统框架,他有什么优点呢?让我们共同探讨一下吧! 图片来源:unia…...

2024最新独立站建站教程!WordPress 搭建独立站的方法和步骤

不知道大家是否听说过 WordPress ?最近有个国外博主分享,她60岁的奶奶居然用WordPress建了个关于她宠物日常的小博客,看来 WordPress 在国外真的是很普及。其实,国外很多商家还利用 WordPress 搭建自己的电商网站,那说…...

深入React Flow Renderer(二):构建拖动操作栏

在上一篇博客中,我们介绍了如何启动React Flow Renderer并创建一个基本的工作流界面。本文将进一步深入,着重讨论如何构建一个可拖动的操作栏,它是用户与工作流交互的入口之一。 引言 操作栏是工作流界面的一部分,通常位于界面的…...

Java项目学生管理系统六后端补充

班级管理 1 班级列表:后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…...

PDF控件Spire.PDF for .NET【转换】演示:将 PDF 转换为线性化

PDF 线性化,也称为“快速 Web 查看”,是一种优化 PDF 文件的方法。通常,只有当用户的网络浏览器从服务器下载了所有页面后,用户才能在线查看多页 PDF 文件。然而,如果 PDF 文件是线性化的,即使完整下载尚未…...

猫头虎博主深度探索:Amazon Q——2023 re:Invent大会的AI革新之星

猫头虎博主深度探索:Amazon Q——2023 re:Invent大会的AI革新之星 授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科…...

Spring框架-GOF代理模式之JDK动态代理

我们可以分成三步来完成jdk动态代理的实现 第一步:创建目标对象 第二步:创建代理对象 第三步:调用代理对象的代理方法 public class Client {public static void main(String[] args) {//创建目标对象final OrderService target new OrderS…...

基于JAVAEE技术校园车辆管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园车辆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...

基于FFmpeg,实现播放器功能

一、客户端选择音视频文件 MainActivity package com.anniljing.ffmpegnative;import android.Manifest; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Ur…...

利用tf-idf对特征进行提取

TF-IDF是一种文本特征提取的方法,用于评估一个词在一组文档中的重要性。 一、代码 from sklearn.feature_extraction.text import TfidfVectorizer import numpy as npdef print_tfidf_words(documents):"""打印TF-IDF矩阵中每个文档中非零值对应…...

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然,异常才是常态,用来标注IT运维工作再适合不过。 因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。 故障处理是最心跳的事情,没有…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四&#xff…...