文档章节

Java--Big Number操作(BigInteger类和BigDecimal类)

akane_oimo
 akane_oimo
发布于 2018/09/16 21:03
字数 691
阅读 19
收藏 5

BigInteger类

java.math.BigInteger 类的使用场景是大整数操作。它提供类似所有Java的基本整数运算符和java.lang.Math中的所有相关的方法的操作,如+、-、*、/、%、&、|、mod、>>、<<,以及min()、max()等等。只不过它操作的整数都是极其大的,为科学计算提供了很大的便利。比如下面的代码就是计算20000000000000000000 * 30000000000000000000,利用BigInteger可以很容易的计算出来结果。

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String a = in.nextLine();
        String b = in.nextLine();
        BigInteger biga = new BigInteger(a);
        BigInteger bigb = new BigInteger(b);
        BigInteger result = biga.multiply(bigb);
        System.out.println(result);
    }
}

//输入
30000000000000000000
20000000000000000000
//输出
600000000000000000000000000000000000000

构造函数

BigInteger提供了6个构造函数,方便取到一个大数。上方的代码就是利用形参是String的构造函数来将传入的字符串转换为BigInteger类型。常用的构造方法如下:

  1. BigInteger(String val):将10进制字符串转换为BigInteger
  2. BigInteger(byte[] val):将只含有0和1的bite[]数组转换为2进制表示的BigInteger值
  3. BigInteger(int numBits, Random rnd):构造一个随机生成的BigInteger,均匀分布在范围0到 (2^numBits - 1)
  4. BigInteger(String val, int radix):将字符串转换为指定进制的BigInteger

类方法

BigInteger的类方法有40多个,覆盖了简单四则运算、位运算、科学计算、哈希运算、类型转换等。下面是最最常用的方法:

  1. BigInteger abs() :求绝对值
  2. BigInteger add(BigInteger val):计算和
  3. BigInteger subtract(BigInteger val):计算差
  4. BigInteger multiply(BigInteger val):计算积
  5. BigInteger divide(BigInteger val):计算商
  6. BigInteger pow(int exponent) :计算幂
  7. BigInteger remainder(BigInteger val):计算余数
  8. BigInteger max(BigInteger val):返回较大值
  9. BigInteger min(BigInteger val):返回较小值

BigDecimal类

java.math.BigDecimal 类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作。该类的使用范围是小数运算。我们都知道Java的float和double是浮点数,直接进行比较操作、运算操作都会有误差,BigDecimal就不会出现这种情况。

toString()方法提供BigDecimal的规范表示。它使用户可以完全控制舍入行为。提供用于操作BigDecimal规模两种类型的操作:

  • 缩放/舍入操作
  • 小数点移动操作。

日常Coding中我还没用到过这个类,需要使用的时候再查看文档吧。不过这个类的使用方法应该和BigInteger类类似,只不过支持小数操作,在方法头中会多一些形参来控制精度或其他控制。

 

© 著作权归作者所有

共有 人打赏支持
akane_oimo
粉丝 21
博文 131
码字总数 161640
作品 0
南京
其他
私信 提问
Java 可变对象和不可变对象

一、简单定义 不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。 不可变对象的类即为不可变类(Immuta...

JackieYeah
2014/03/04
0
0
.NET和java的RSA互通,仅此而已

.NET和java的RSA互通,仅此而已 在开始这篇文章之前,先请读者朋友阅读老唐的这两篇文章: 1、Java与.Net环境下RSA加密解密交互不成功的问题解决 2、Java与.Net环境下RSA加密解密交互不成功的...

lubiaopan
2011/03/09
0
0
随机模拟 java 数据插件 - Jmockdata

Jmockdata ![License](http://www.apache.o

寻觅一只耳朵
2017/01/05
0
20
java BigInteger 类

头文件:import java.io.; import java.util.; import java.math.*; 读入: Scanner cin = Scanner (System.in); while(cin.hasNext())//等价于!=EOF n=cin.nextInt();//读入一个int型的数 ......

皮皮大仙
2011/05/08
0
0
Java BigDecimal详解

一、引言 借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而...

JackieYeah
2014/03/05
0
7

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 姑娘馋的口水都留下来了。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Fall Out Boy的单曲《Disloyal Order Of Water Buffaloes》 《Disloyal Order Of Water Buffaloes》- Fall Out Boy 手机党...

小小编辑
28分钟前
6
4
vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部