BigInteger和BigDecimal
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的更多相关文章
- Java的大数操作分为BigInteger和BigDecimal
Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...
- Java 大数类BigInteger和BigDecimal的基本函数
在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运 ...
- BigInteger与BigDecimal
BigInteger与BigDecimal Java大数字运算(BigInteger类和BigDecimal类) 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger ...
- 【转】BigInteger、BigDecimal详解
参考 http://lavasoft.blog.51cto.com/62575/228705/ 从Java4到Java5,Java对BigInteger.BigDecimal两个类功能一直再做扩展与改 ...
- Java 之 数学相关类 Math、BigInteger、BigDecimal
一.java.lang.Math 类 一.Math 类概述 java.lang.Math 类包含用于执行基本数学运算的方法,如指数.对数.平方根和三角函数.类似于这样的类,其所有方法均为静态方法,并且 ...
- 拯救你丢失的精度——BigInteger和BigDecimal类(入门)
第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: //针对超过整数范围的运算(整数最大值:2147483647) BigInt ...
- java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal
一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- Day30 BigInteger和BigDecimal
BigInteger与BigDecimal BigInteger类 Integer类作为int的包装类,能存储的最大整型值为2 31-1,Long类也是有限的, 最大为2 63-1.如果要表示再大的整 ...
- 经常使用的系统类Math、Arrays、System、BigInteger和BigDecimal以及日期类,时间戳
一.Math 常用类: //看看Math常用的方法(静态方法)//1.abs绝对值int abs = Math . abs(-9);System. out . printLn(abs);//9//2. ...
随机推荐
- Mybatis-解决属性名和字段名不一致的问题
解决属性名和字段名不一致的问题 目录 解决属性名和字段名不一致的问题 1. 问题 2. ResultMap 1. 问题 在数据库中,密码字段为pwd,而在实体类中为password package c ...
- ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版
TP6.0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用,经过测试,最后得出域名绑定应用是最合适的部署方式.如果有更好的部署方案,欢迎分享.QQ:23426945 1. 下载TP6.0,引 ...
- Minimizing maximizer(POJ 1769)
原题如下: Minimizing maximizer Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 5104 Accep ...
- Git | Git入门,成为项目管理大师(一)
大家好,周一我们迎来了一个新的专题--git. 写这个专题的初衷有两点,第一点是觉得好像很少有公众号提到git相关的技术,可能是觉得太基础了看不上.但实际上git非常重要,在我们实际的开发工作当中使用 ...
- ftp被动模式下 ftp_put 上传文件
参考地址:https://blog.csdn.net/liuhelong12/article/details/50218311
- JVM七大垃圾回收器下篇G1(Garbage First)
G1回收器:区域化分代式 既然我们已经有了前面几个强大的GC,为什么还要发布Garbage First (G1)GC? 原因就在于应用程序所应对的业务越来越庞大.复杂,用户越来越多,没有GC就不能保 ...
- docker 搭建私有云仓库
docker搭建私有仓库 registry私有仓库 下载docker-distribution软件包 yum install epel-release yum install docker-dis ...
- openstack核心组件——keystone身份认证服务(5)
云计算openstack核心组件——keystone身份认证服务(5) 部署公共环境 ntp openstack mariadb-server rabbitmq-server memcache 1.w ...
- 在CentOS Linux 7.5上安装MySQL
本文来自与https://www.linuxidc.com/Linux/2018-05/152574.htm 随着CentOS 7 MySQL的发布,世界上最流行的开源关系数据库管理系统在CentOS ...
- python-逻辑结构操作
0x01 大纲 逻辑结构 list dict 判断if else elif break continue while 0x02 添加 list = [i for i in range(0,10)] p ...