BigInteger

BigInteger的作用是对整数做计算,一般的使用String类型初始化BigInteger,它除了封装了基本的加减乘除运算外还提供了signum(),abs()等函数,使用方式基本为创建两个BigInteger进行运算例如A_BigInteger.add(B_BigInteger)对两个数进行加法运算,结果还是一个BigInteger。然后它的作用远远不止于此,Java的八种数据类型整数精度最大的是Long,如果计算值超过了Long.Max_Value就会损失精度。使用BigInteger则完全可以避免。两个BigInteger的结果可以通过终止函数获取结果,例如intValue()将结果转换位int值,但是这里需要注意,如果结果已经超过了目标结果类型的精度则会不准确,最好的方式是通过.toString()函数获取一个字符串的值,这样即使结果大于Long.Max_Value也不会丢失精度。最后BigInteger不能运算小数,否则抛出异常。以下是代码示例:

public static void main(String[] args) {
// int最大值 2147483647
System.out.println(Integer.MAX_VALUE);
// long最大值 9223372036854775807
System.out.println(Long.MAX_VALUE); BigInteger bigInteger1 = new BigInteger("9223372036854775807");
BigInteger bigInteger2 = new BigInteger("9223372036854775807");
// 两个数相乘
BigInteger value12 = bigInteger1.multiply(bigInteger2);
// 直接获取Long结果是错误的,因为已经超过了Long的最大精度
// long longValue = value12.longValue();
// 获取字符串可以
String svalue12 = value12.toString();
// 85070591730234615847396907784232501249
System.out.println(svalue12); // 在将相乘的结果/9223372036854775807
BigInteger bigInteger3 = new BigInteger(svalue12);
BigInteger bigInteger4 = new BigInteger("9223372036854775807");
// 两个数相除
BigInteger bigInteger34 = bigInteger3.divide(bigInteger4);
// 这个结果是没有超过Long的精度
long lbigInteger34 = bigInteger34.longValue();
// 9223372036854775807
System.out.println(lbigInteger34); BigInteger bigInteger5 = new BigInteger("1");
BigInteger bigInteger6 = new BigInteger("1");
// 两个数相加
BigInteger bigInteger56 = bigInteger5.add(bigInteger6);
System.out.println(bigInteger56.byteValue()); BigInteger bigInteger7 = new BigInteger("2");
BigInteger bigInteger8 = new BigInteger("1");
// 两个数相减
BigInteger bigInteger78 = bigInteger7.subtract(bigInteger8);
System.out.println(bigInteger78.byteValue()); // 错误的,它不支持小数
// BigInteger bigInteger9 = new BigInteger("1.2");
}

BigDecimal

BigDecimal在实际开发中要比BigInteger的使用频率高的多,原因就是它可以计算小数,并且它可以根据用户的设置对小数结果进行改变,例如保留小数位数,保留小数策略。

    public static void main(String[] args) {
Long max_long = Long.MAX_VALUE;
System.out.println(max_long); BigInteger bigInteger = new BigInteger(max_long + "");
// 你可以使用一个BigInteger实例化BigDecimal
BigDecimal bigDecimal1 = new BigDecimal(bigInteger);
BigDecimal bigDecimal2 = new BigDecimal(bigInteger);
// 除法运算
BigDecimal bigDecimal12 = bigDecimal1.divide(bigDecimal2);
System.out.println(bigDecimal12.intValue()); // 使用字符串实例化BigDecimal做加法运算
BigDecimal bigDecimal3 = new BigDecimal("1");
BigDecimal bigDecimal4 = new BigDecimal("1");
BigDecimal bigDecimal34 = bigDecimal3.add(bigDecimal4);
System.out.println(bigDecimal34.intValue()); // 使用字符串实例化BigDecimal做减法运算
BigDecimal bigDecimal5 = new BigDecimal("5");
BigDecimal bigDecimal6 = new BigDecimal("3");
BigDecimal bigDecimal56 = bigDecimal5.subtract(bigDecimal6);
System.out.println(bigDecimal56.intValue()); // 使用字符串实例化BigDecimal做乘法运算
BigDecimal bigDecimal7 = new BigDecimal("3");
BigDecimal bigDecimal8 = new BigDecimal("4");
BigDecimal bigDecimal78 = bigDecimal7.multiply(bigDecimal8);
System.out.println(bigDecimal78.intValue()); // 对小数做操作,这个加法运算的结果是 7.9888
BigDecimal bigDecimal9 = new BigDecimal("3.1");
BigDecimal bigDecimal10 = new BigDecimal("4.8888");
BigDecimal bigDecimal910 = bigDecimal9.add(bigDecimal10);
System.out.println(bigDecimal910.toString()); BigDecimal bigDecimala1 = new BigDecimal("3.1");
BigDecimal bigDecimala2 = new BigDecimal("4.8888");
BigDecimal bigDecimala12 = bigDecimala1.add(bigDecimala2);
// 对一个BigDecimal的结果进行小数舍入,以下是保留小数点后3位,多余的四舍五入 7.989
BigDecimal sbigDecimala12 = bigDecimala12.setScale(3, BigDecimal.ROUND_HALF_UP);
System.out.println(sbigDecimala12.toString());
}

BigInteger和BigDecimal的更多相关文章

  1. Java的大数操作分为BigInteger和BigDecimal

    Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...

  2. Java 大数类BigInteger和BigDecimal的基本函数

    在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运 ...

  3. BigInteger与BigDecimal

    BigInteger与BigDecimal Java大数字运算(BigInteger类和BigDecimal类) 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger ...

  4. 【转】BigInteger、BigDecimal详解

    参考 http://lavasoft.blog.51cto.com/62575/228705/ 从Java4到Java5,Java对BigInteger.BigDecimal两个类功能一直再做扩展与改 ...

  5. Java 之 数学相关类 Math、BigInteger、BigDecimal

    一.java.lang.Math 类 一.Math 类概述 java.lang.Math 类包含用于执行基本数学运算的方法,如指数.对数.平方根和三角函数.类似于这样的类,其所有方法均为静态方法,并且 ...

  6. 拯救你丢失的精度——BigInteger和BigDecimal类(入门)

    第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: //针对超过整数范围的运算(整数最大值:2147483647) BigInt ...

  7. java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

    一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  8. Day30 BigInteger和BigDecimal

    BigInteger与BigDecimal BigInteger类 Integer类作为int的包装类,能存储的最大整型值为2 31-1,Long类也是有限的, 最大为2 63-1.如果要表示再大的整 ...

  9. 经常使用的系统类Math、Arrays、System、BigInteger和BigDecimal以及日期类,时间戳

    一.Math 常用类: //看看Math常用的方法(静态方法)//1.abs绝对值int abs = Math . abs(-9);System. out . printLn(abs);//9//2. ...

随机推荐

  1. 关于取表中id最大值+1的select语句,哪种效率更高?

    需求:取stock表中id最大值+1,作为下一个id值. 特殊情况:考虑到表中会没有值,max(id)会返回空,因此需要用case when进行判断. 实现一:select (case max(id) ...

  2. 把Employees显示在页面上

    项目代码下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200429-1.zip 需求:从后台DB取出雇员数据,显示在前台页面上: ...

  3. python调用接口——requests模块

    前提:安装pip install requests 导入import requests 1.get请求   result=requests.get(url,d).json()  或  .text 2. ...

  4. 内存管理初始化源码2:setup_arch

    PFN相关宏说明: /* kernel/include/linux/pfn.h */ PFN : Page Frame Number(物理页帧) /* * PFN_ALIGN:返回地址x所在那一页帧的 ...

  5. day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置

    目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...

  6. Shell编程(3)

    1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变程序运行顺 ...

  7. Debian、kali类虚拟机网络设置

    Linux发行版分类 先说一下Linux发行版的分类,因为不同的发行版,各自设置的网络的方式就不相同, - 我常用的Linux发行版 -- Debian --- debian --- ubuntu - ...

  8. 第3章 02 python字符串类型及操作

    字符串切片 取字符串从结尾到开头,相当于字符串逆序 转义符 转义符表达特定字符的本意 转义符    \“      ---->    ” 字符串操作符 例子: 获取星期字符串 定义星期 获取用户 ...

  9. 堆中的线程私有缓存区域TLAB(Thread Local Allocation Buffer)

    TLAB产生的原因 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据 由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的 为避免多个线程操作同一地址,需要 ...

  10. 喜大普奔!GitHub中文版帮助文档上线了!

    日前,GitHub 文档的简体中文正式发布,开发者可以到官方文档上随意查阅浏览中文文档啦!   对于想要玩 GitHub,但一直苦于英语水平较差的程序员来说,这真是一个天大的好消息.下面一起来感受一下 ...