由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理。
在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误:
大概的意思是“无法结束的除法表达式;没有精确的除结果”。我当时输入的10/3,结果应该是3.3333....333。
于是在网上找资料,发现我原来的处理方式有问题。
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal num3 = num1.divide(num2);
其实devide的函数定义如下
BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;
scale为小数位数;
roundingMode为小数模式;
ROUND_CEILING写成如下便可通过
BigDecimal num3 = num1.divide(num2,10,ROUND_HALF_DOWN);
部分演示:
import java.math.BigDecimal;
import java.util.Scanner;
public class BigDecimal_大数的实数输出用法 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
BigDecimal a=sc.nextBigDecimal();
BigDecimal b=sc.nextBigDecimal();
System.out.println(a.divide(b, 100, BigDecimal.ROUND_HALF_DOWN));//对于无限循环的可以设定长度大小输出
//System.out.println(a.divide(b).setScale(10,BigDecimal.ROUND_HALF_DOWN));//1 这种输出都不行 只可以对除尽的数进行大小输出约束,循环的不行!
// System.out.println(String.format("%.100f", a.divide(b))); //2 这两种输出都不行,同 1
//1除以3抛异常
/*Exception in thread "main" java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result.*/
}//1 除以3.0
//0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
}
}