BigDecimal 比Double, float更加精确,你记住这个就行啦!
1.构造方法
public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用
public BigDecimal(int val) 将int表示形式转换成BigDecimal
public BigDecimal(String val) 将String表示形式转换成BigDecimal
2.加减乘除
public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法
3. 四舍五入
BigDecimal.setScale()方法用于格式化小数点
setScale(1)表示保留一位小数,默认用四舍五入方式
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
import java.math.BigDecimal;
import java.util.*;
public class Main{
public static void main(String []argc) {
double x = 1;
double y = 3;
double res = x/y * 1000000;
int n;
//将求得数据,转换为BigDecimal, 之后将其四舍五入,然后取int值与618034比较,其实就是求比值四舍五入后已经达到了与 0.618034 一致的精度。只是转为为618034
while(618034 != new BigDecimal(String.valueOf(res)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue()) {
double temp = x + y;
x = y;
y = temp;
res = x/y * 1000000;
}
System.out.println((int)x + "/" + (int) y);
}
}