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. ...
随机推荐
- 创建node节点上kubeconfig文件
#!/bin/bash#by love19791126 107420988@qq.com# 创建node节点上kubeconfig文件 在master节点部署#kubeconfig是用于Node节点上 ...
- Java枚举解读
Java枚举 枚举类概念的理解与定义 一个类的对象是有限个,确定的,我们称此为枚举类. 当需要定义和维护一组常量时,强烈建议使用枚举类. 如果一个枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
- CTF-WeChall-第一天
2020.09.09 今天来了一个新平台,WeChall,从简单的开始做,才能找到自信--i春秋的题做自闭了
- algorithm入门算法中的常见问题
KMP算法(next数组) 二分查找(非递归) /** * 二分查找(非递归) * @param arr 从小到大的排序数组 * @param target 目标查找值 * @return */ pu ...
- DataStax Bulk Loader教程(一)
DataStax Bulk Loader - dsbulk是在DSE 6 引入的一种新的批量加载方法.(点击这里下载DataStax Bulk Loader). 它提供了将数据加载(load)到Dat ...
- Kafka 【入门一篇文章就够了】
初识 Kafka 什么是 kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区.多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订 ...
- 预科班D12
2020.09.22星期二 预科班D12 学习内容: 一.修改文件的两种方式 1.方案一 思路:(1)先以r形式打开源文件 (2)将源文件内容一次性读入内存中,在内存中修改完毕 (3)以w ...
- Git裸仓库的分支(Active Branch)切换
Git裸仓库的Active Branch切换方法 在服务器上通过init --bare创建了一个裸仓库作为远程仓库使用,并且存在三个分支(master/kid/develop),但在使用中发现代码虽然 ...
- 初探JVM
JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数? 内存快照如何抓取,怎么分析 ...
- mysql-17-procedure
#存储过程 /* 一组预先编译好的sql语句集合,理解成批处理语句 好处: 1.提高代码重用性 2.简化操作 3.减少了编译次数并减少了和数据库服务器的连接次数,提高了效率 */ #一.创建 /* c ...