-
为什么要用BigDecimal?
因为double、float表示的小数范围有限,且精度不够,不能精确计算。
float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。
poj1001Exponentiation
theme:给定实数R与整数n,输出R^n的精确解,不能输出前导0!
solution:利用java BigDecimal类,注意去掉后缀0并转为字符串时要避免科学计数法,最后如果以0开头则删掉0
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String argv[]){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
String s=in.next();
int n=in.nextInt();
BigDecimal a=new BigDecimal(s);
BigDecimal ans=a.pow(n).stripTrailingZeros();
System.out.println(ans.toPlainString().replaceAll("^0", ""));//去掉前导0,即0.2变为.2,注意因为这里不会等于0才这样,应该判断以.0开头,再sunString(1)
}
}
}
设置精度:
result.setScale(2,BigDecimal.ROUND_HALF_EVEN) //保留2位小数