我是靠谱客的博主 神勇板栗,这篇文章主要介绍Java中BigInteger和BigDecimal的用法(写题真的很好用,还精确),现在分享给大家,希望可以做个参考。

精确

首先,这个经典的问题大家都知道
在这里插入图片描述
对于0.2+0.1这个数字,我们都知道是0.3
可是计算机执行的结果却是
0.30000000000000004
在这里插入图片描述
原因在于我们的计算机是二进制的。
浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
例如:0.4的二进制表示并非就是精确的0.4。反而最为接近的二进制表示是 0.3999999999999999。
浮点数的值实际上是由一个特定的数学公式计算得到的。
如果我们使用BigDecimal类
在这里插入图片描述
我们可以看到,输出结果是正确的.
在这里插入图片描述

加减乘除的基本运算

刚才使用了一句

复制代码
1
2
System.out.println( a.add(b));

a.add(b)就是A+B
相应的

复制代码
1
2
3
4
5
6
7
8
public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法

如果我们使用,直接就可以写

复制代码
1
2
3
4
5
a.add(b) a.subtract(b) a.multiply(b) a.divide(b)

就可以进行加减乘除啦

这里有一点需要注意的是除法运算divide.

BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
具体的这个问题怎么解决建议百度,不再赘述.

举例写题

例如OJ上的这道题
在这里插入图片描述
C语言将要使用字符串来写
java只需要

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); BigDecimal b1 = sc.nextBigDecimal(); BigDecimal b2 = sc.nextBigDecimal(); System.out.println(b1.add(b2)); } }

我们看到,这个代码就已经AC了
在这里插入图片描述
再例如
在这里插入图片描述
高精度乘法

复制代码
1
2
3
4
5
6
7
8
9
10
11
import java.math.BigDecimal; import java.util.Scanner; public class bigshu { public static void main(String[] args) { Scanner sc = new Scanner(System.in); BigDecimal a = sc.nextBigDecimal(); BigDecimal b = sc.nextBigDecimal(); System.out.println(a.multiply(b)); } }

在这里插入图片描述

作用很多,不仅仅是加减乘除

因为BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大
例如取绝对值也可以用
在这里插入图片描述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while (n--!=0) { BigDecimal a = sc.nextBigDecimal(); System.out.println(a.abs()); System.out.println(""); } } }

在这里插入图片描述
相应的还有
.remainder(); 取余

.pow(); a.pow(b)=a^b

.gcd(); 最大公约数

.abs(); 绝对值

.negate(); 取反数

.mod(); a.mod(b)=a%b=a.remainder(b);

.max(); min();

.punlic int comareTo();

.boolean equals(); 是否相等

快去使用啊啊啊

最后

以上就是神勇板栗最近收集整理的关于Java中BigInteger和BigDecimal的用法(写题真的很好用,还精确)的全部内容,更多相关Java中BigInteger和BigDecimal内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部