java 大数基本操作

导言:

  计算机中数字的表示范围是有一定的限制的,像Java中,常用的数据类型,如int、double等数据类型表示的范围都是有限的,当我们要计算的数字,其位数达到成百上千时,这些数据类型无法满足我们的需求,C语言中我们可以使用数组来储存位数,再对两个数组进行相应的运算;Java中为了处理大整数的运算,提供了一种数据类型:BigInteger,BigDecimal,它能存储任意位数的大数,并提供对它们进行操作的方法。

说明:

  BigInteger 和 BigDecimal 是位于java.math 包下的两个类,具体摘要如下:

BigDecimal 

不可变的、任意精度的有符号十进制数。任意精度小数

BigInteger

不可变的任意精度的整数。任意精度整数

1BigInteger基本运算: 2 3import java.math.BigInteger; 4import java.util.Scanner; 5 6public class Main { 7 public static void main(String[] args) { 8 Scanner scanner = new Scanner(System.in); 9 BigInteger one = scanner.nextBigInteger(); 10 BigInteger two = scanner.nextBigInteger(); 11 System.out.println("大数相加:" + one.add(two)); 12 System.out.println("大数相减:" + one.subtract(two)); 13 System.out.println("大数相乘:" + one.multiply(two)); 14 System.out.println("大数相除:" + one.divide(two)); 15 scanner.close(); 16 } 17} 18 19BigInteger的基本操作

方法 

类型

描述

public BigInteger add(BigInteger val)

普通

将两个大数相加

public BigInteger subtract(BigInteger val)

普通

将两个大数相减

public BigInteger multiply(BigInteger val)

普通

将两个大数相乘

public BigInteger divide(BigInteger val)

普通

将两个大数相除

public BigInteger max(BigInteger val)

普通

返回两个大数中的最大值

public BigInteger min(BigInteger val)

普通

返回两个大数中的最小值

public BigInteger[] divideAndRemainder(BigInteger val)

普通

除发操作,数组的第一个元素为除法的商,第二个元素为除法的余数

public int compareTo(BigInteger val)

普通

 当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。

public boolean equals(Object x)

普通 

 当且仅当指定的 Object 是一个其值在数字上等于此 BigInteger 的 BigInteger 时,返回 true。

更多方法实现请看api文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

1BigDecimal基本操作: 2 3BigDecimalBigInteger 基本上操作方法都相同,加减乘除基本相似 4 5import java.math.BigDecimal; 6import java.util.Scanner; 7 8public class Main { 9 public static void main(String[] args) { 10 11 Scanner scanner = new Scanner(System.in); 12 while (scanner.hasNext()) { 13 BigDecimal one = scanner.nextBigDecimal(); 14 BigDecimal two = scanner.nextBigDecimal(); 15 System.out.println(one.compareTo(two)); 16 System.out.println(one.equals(two)); 17 } 18 scanner.close(); 19 } 20} 21 22输入输出数据如下: 23 24000000000000000001 1 250 26true 2700000000000001.0 1 280 29false 301.0 1 310 32false

  compareTo:值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。

  equals:仅当两个 BigDecimal 对象的值和标度都相等时,此方法才认为它们相等(因此通过此方法进行比较时,2.0 不等于 2.00)。当且仅当指定的 Object 为 BigDecimal,并且其值和标度都等于此 BigDecimal 的值和标度时,返回 true。

nlk
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

java.math.BigDecimal类的用法

在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。下边我们介绍BigDecimal类:BigDecimal的实现利用到了BigInteger,不同的是Big