BigInteger 大整数 比较大小

 一、以整数型礼品交易为例子

int userSend = Integer.valueOf(id);
			int amount = Integer.valueOf(amountStr);
			int userAccept = Integer.valueOf(userIdAccept);
			
			
			GiftService giftService = new GiftService();
			boolean carry1 = giftService.isHavePropertyByUserIdByGiftId(userSend, 1);
			boolean carry2 = giftService.isHavePropertyByUserIdByGiftId(userAccept, 1);
			
			if (carry1 && carry2) {
			    BigInteger userSendCurrentAmount = giftService.getAmountByUserIdAndGiftId(userSend, 1);
			    
			    BigInteger amountBigInt = BigInteger.valueOf(amount);
			    
			    if (userSendCurrentAmount.compareTo(amountBigInt) > 0 && userSendCurrentAmount.compareTo(BigInteger.ZERO) > 0 && amountBigInt.compareTo(BigInteger.ZERO) > 0) {
		            // 执行交易操作
		        } else {
		            // 处理金额不足或者金额为负的情况
		        }
			
			} else {
				ResponseReturnWriterUtil.writeListResponse2(response, 1, "\"双方都持有相应账户才可进行交易\"");
			}
			
  1. userSendCurrentAmount.compareTo(amountBigInt) > 0:这部分代码比较了 userSendCurrentAmountamountBigInt 两个 BigInteger 对象的大小关系。如果 userSendCurrentAmount 大于 amountBigInt,则返回一个大于 0 的值,表示满足交易条件。这个条件确保了发送者拥有的账户余额  数量大于交易中要转移的数量。

  2. userSendCurrentAmount.compareTo(BigInteger.ZERO) > 0:这部分代码确保 userSendCurrentAmount 大于零。这是因为在正常情况下,用户拥有的账户余额  数量应该大于等于零,不能为负数。这个条件是对用户当前拥有的账户余额  数量进行验证。

  3. amountBigInt.compareTo(BigInteger.ZERO) > 0:这部分代码确保 amountBigInt(即交易中要转移的数量)也大于零。因为在交易中,转移的数量应该是正数,不能为零或负数。

综合这三个条件,只有当发送者拥有的账户余额 数量大于交易中要转移的数量,并且这两个数量都大于零时,才会执行交易操作。如果不满足这些条件,则会执行注释为"处理金额不足或者金额为负的情况"的部分代码,即处理交易条件不满足的情况。

二、介绍bigInteger

BigInteger 是 Java 中的一个类,用于表示任意精度的整数。在 Java 中,基本的整数类型(如 intlong 等)有其范围限制,超出范围后会出现溢出的情况。而 BigInteger 类可以表示任意大小的整数,因此可以用于处理大整数计算,例如在金融领域或密码学中经常会用到。

BigInteger 类的一些重要特点和用法:

  1. 任意精度整数: BigInteger 类可以表示任意大小的整数,不受 Java 基本整数类型的范围限制。
  2. 不可变性: BigInteger 对象一旦创建,就不能修改其值。任何对 BigInteger 对象的运算操作都会生成一个新的 BigInteger 对象。
  3. 支持常见的整数运算操作: BigInteger 类提供了丰富的方法来进行整数的加、减、乘、除等运算操作。
  4. 提供比较和判断方法: BigInteger 类提供了 compareTo 方法来比较两个 BigInteger 对象的大小关系,以及 equals 方法来判断两个 BigInteger 对象是否相等。
  5. 不支持基本类型自动装箱: 由于 BigInteger 是一个类而不是基本数据类型,因此不能直接使用基本类型的运算符对 BigInteger 对象进行操作。需要使用 BigInteger 类提供的方法来进行运算。
  6. 静态工厂方法: BigInteger 类提供了一些静态工厂方法来创建 BigInteger 对象,例如 valueOf(long val) 可以将一个 long 类型的值转换为 BigInteger 对象。

BigInteger 类是 Java 中用于表示任意精度整数的类,可以在需要处理大整数计算的场景中发挥重要作用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++实现vector

目录 前言 1.成员变量 2.成员函数 2.1构造函数 2.2析构函数 2.3begin,end 2.4获取size和capacity 2.5函数重载【】 2.6扩容reserve 2.7resize 2.8insert 2.9删除 2.10尾插、尾删 3.0拷贝构造函数 3.1赋值运算符重载 前言 自主实现C中vector大部分的功能可以使我们更好的理解并使…

第二十二章 Maven

一、Maven 1. Maven 简介 Maven 是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。Maven 在美国是一个口语化的词语,代表专家、内行的意思,约等于北京话中的老炮儿。有老炮儿在身边,项目经理可谓得心应手。 项…

Redis的5大常见数据类型的用法

上一篇文章我们讲了Redis的10大应用场景,这一篇文章就针对Redis的常用数据结构进行一个说明,通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时,不同数据类型对应的不同数据结构,如下就对5大常用的数据类型进行…

[每周一更]-第92期:Go项目中的限流算法

这周五在清明假期内,提前更新文章 很多业务会有限流的场景,比如活动秒杀、社区搜索查询、社区留言功能;保护自身系统和下游系统不被巨型流量冲垮等。 在计算机网络中,限流就是控制网络接口发送或接收请求的速率,它可防…

k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群,RocketMQ 模式 k8s 部署 canal 集群,RocketMQ 模式前提MySQLRocketMQ制作 canal-admin、canal-server 镜像 部署 zookeeper部署 canal-admin部署 canal-server测试 k8s 部署 canal 集群,RocketMQ 模式 前提 MySQL 开启…

idea2023.2.1 java项目-web项目创建-servlet类得创建

如何创建Java项目 1.1 方式1: 1.2 方式: 1.3 方式 如何创建web项目 方式 ----- 推荐 如何创建servlet类 复制6 中得代码 给servlet 配置一个路径 启动tomcat 成功了

Plonky2.5:在Plonky2中验证Plonky3 proof

1. 引言 Plonky2.5为QED Protocol团队主导的项目,定位为: 在Plonky2 SNARK中验证Plonky3 STARK proof。 从而实现Plonky系列的递归证明。 开源代码实现见: https://github.com/QEDProtocol/plonky2.5https://github.com/Plonky3/Plonky3&a…

go库x/text缺陷报告CVE-2022-32149的处理方案

#问题描述 go库 golang.org/x/text ,注意这里不是go的源码, 在0.3.8版本之前存在一个缺陷(Vulnerability) 缺陷ID CVE-2022-32149 具体描述 攻击者可以通过制作一个Accept-Language报头来导致拒绝服务。 具体的原因是,在解析这个Accept-L…

Scala第十九章节(Actor的相关概述、Actor发送和接收消息以及WordCount案例)

Scala第十九章节 章节目标 了解Actor的相关概述掌握Actor发送和接收消息掌握WordCount案例 1. Actor介绍 Scala中的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习Scala Actor的目的主要是为后续学习Akka做准备。 1.1 Java并发编程的问题 在Java并…

如何通过ArkTS卡片的Canvas自定义绘制能力实现五子棋游戏卡片

介绍 本示例展示了如何通过ArkTS卡片的Canvas自定义绘制能力实现一个简单的五子棋游戏卡片。 使用Canvas绘制棋盘和黑白棋子的落子。通过卡片支持的点击事件进行交互,让用户在棋盘上进行黑白棋子的对局。通过TS的逻辑代码实现五子棋输赢判定、回退等逻辑计算&…

Linux制作C++静态库和动态库并使用示例

创建动态库&#xff1a; 编写源文件&#xff1a; // sub.h 显式调用 #include <iostream>extern "C" int sub(int a, int b);// sub.cpp #include "sub.h"int sub(int a, int b) {return a - b; }// quadrature.h 隐式调用 #include <iostream&…

dhcp中继代理

不同过路由器分配ip了&#xff0c;通过一台服务器来代替&#xff0c;路由器充当中继代理功能&#xff0c;如下图 服务器地址&#xff1a;172.10.1.1/24 配置流程&#xff1a; 1.使能dhcp功能 2.各个接口网关地址&#xff0c;配置dhcp中继功能 dhcp select relay &#xff0…

redis---位图Bitmap和位域 Bitfield

位图是字符串类型的拓展&#xff0c;可以使用一个string类型来模拟一个Bit数组。数组的下标就是偏移量&#xff0c;值只有0和1&#xff0c;也支持一些位运算&#xff0c;比如与或非&#xff0c;异或等等&#xff0c;它们的应用场景非常广泛比如可以用来记录用户的签到情况&…

MySQL之索引详细总结

索引简介 索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用(指向)数据&#xff0c;这样就可以在这些数据结构上实现高级查法&#xff0c;这种数据结构就是索引 为什…

【星计划★C语言】c语言初相识:探索编程之路

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;星计划★C语言、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️第一个c语言程序二. ⛳️数据类型2.1 &#x1f514;数据单位2.2 &…

【TB作品】STM32单片机读取大气压强传感器BMP280

文章目录 读取效果kei工程使用方法接线方法源码工程下载 读取效果 kei工程 标准库&#xff1a; 使用方法 将这2个文件加入 main示例&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h" #include <stdio.h> #incl…

在线生成占位图片工具:简便快捷的设计利器

title: 在线生成占位图片工具&#xff1a;简便快捷的设计利器 date: 2024/4/4 17:36:41 updated: 2024/4/4 17:36:41 tags: 占位图片网页设计开发工具图片生成页面布局效率提升预览调整 在网页开发或设计过程中&#xff0c;经常会遇到需要临时使用占位图片的情况。占位图片是指…

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1&#xff1a;运行查看有什么可以快捷使用的&#xff0c;更新了些什么&#xff0c;可不可以直接复制粘贴 主要内容&#xff1a;在web端中模拟手机类型的点击长按操作&#xff0c;不能直接运行在安卓与io…

专升本--python运算符总结

运算优先级 同一个等级是没有先后顺序的&#xff0c;此外&#xff0c;赋值语言的先后问题&#xff1a; 赋值的顺序从上往下&#xff0c;同一行一般都是代表同时进行赋值&#xff0c;如图所示&#xff1a; 一.and A and B&#xff0c;若A,B有任意一个为假&#xff08;0&#x…