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);
}
}