程序地带

java存大数和高精度浮点数(BigInteger与BigDecimal)


BigInteger与BigDecimal
BigInteger

背景: Integer 类作为 int 的包装类,能存储的最大的整数值为 2^31 - 1, Long类也是有限的,最大为 2^63 - 1. 如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。


java.math包的BigInteger 可以表示不可变的任意精度的整数。BigInteger 提供所有 Java的基本整数操作符的对应物,并提供 java.lang.Math的所有方法相关。另外,BigInteger 还提供一下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。


构造器


BigInteger(Sring val): 根据字符串构建BigInteger对象

测试


public class Main {
public static void main(String[] args) {
BigInteger bigInteger = new BigInteger("214125151526734574578548484845854845");
System.out.println(bigInteger);
}
}

输出

214125151526734574578548484845854845
BigDecimal

背景: 一般的Float类和Double类可以用来做科学计算或者工程计算,但是在 商业计算中,要求数字精度比较高,故用 *java.math.BigDecimal


BigDecimal类支持不可变的、任意精度的有符号十进制定点数。


构造器


public BigDecimal(double val);public BigDecimal(String val);

常用方法


public BigDecimal add(BigDecimal augend); 加法public BigDecimal substract(BigDecimal subtrahend); 减法public BigDecimal multiply(BigDecimal multiplicand); 乘法public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode); 除法

测试


import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("15.1231241251512512512521");
BigDecimal bigDecimal1 = new BigDecimal("11.121");
System.out.println(bigDecimal.add(bigDecimal1));
System.out.println(bigDecimal.subtract(bigDecimal1));
System.out.println(bigDecimal.multiply(bigDecimal1));
// 要求保留15位小数, BigDecimal.ROUND_HALF_DOWN四舍五入
System.out.println(bigDecimal1.divide(bigDecimal, 15, BigDecimal.ROUND_HALF_DOWN));
}
}

注意: 如果出现java.lang.ArithmeticException则表示除不尽,各可以规定保留小数位数,或者进位模式(四舍五入)


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoxiao66668/article/details/112760965

随机推荐

Go语言框架Gin之6 日志框架 Logrus

本节主要讲解Go语言优秀的日志框架:Logrus。Logrus是一个结构化、可插拔的Go日志框架,完全兼容官方log库接口。功能强大的同时,Logrus具有高...

cqu_jiangzhou 阅读(598)

读书笔记: 向上生长

文章目录背景学习的本质1.为什么学习会比看剧痛苦?2.知识的分类3.毕业后如何学习?4.英语学习的误区5.厉害的人如何培养?6.关于积累,精进的...

今天又是充满希望的一天 阅读(357)