概述
精确
首先,这个经典的问题大家都知道
对于0.2+0.1这个数字,我们都知道是0.3
可是计算机执行的结果却是
0.30000000000000004
原因在于我们的计算机是二进制的。
浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
例如:0.4的二进制表示并非就是精确的0.4。反而最为接近的二进制表示是 0.3999999999999999。
浮点数的值实际上是由一个特定的数学公式计算得到的。
如果我们使用BigDecimal类
我们可以看到,输出结果是正确的.
加减乘除的基本运算
刚才使用了一句
System.out.println( a.add(b));
a.add(b)就是A+B
相应的
public BigDecimal add(BigDecimal value); //加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
如果我们使用,直接就可以写
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只需要
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了
再例如
高精度乘法
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分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大
例如取绝对值也可以用
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的用法(写题真的很好用,还精确)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复