NumberFormat、BigDecimal 不使用科學計數法
阿新 • • 發佈:2019-02-19
/**
* 科學計數法
*/
public static void scientificNotation() {
Double num = 80000000000.000001;
System.out.println("預設計數法:num=" + num);
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);// 不用科學計數
System.out.println("禁用科學計數法:num=" + nf.format(num));
// 不使用任何冪數
System.out.println("BigDecimal.toPlainString()=" + new BigDecimal(num.toString()).toPlainString());
// 有必要時使用科學計數法
System.out.println("\nBigDecimal.toString = " + new BigDecimal(num).toString());
// 有必要時使用科學計數法
System.out.println("BigDecimal.toString = " + new BigDecimal(num.toString()).toString());
// 有必要時使用工程計數法。工程記數法是一種工程計算中經常使用的記錄數字的方法,與科學技術法類似,但要求10的冪必須是3的倍數
System.out.println("\nBigDecimal.toEngineeringString = " + new BigDecimal(num.toString()).toEngineeringString());
}
預設計數法:num=8.0E10
禁用科學計數法:num=80000000000
BigDecimal.toPlainString()=80000000000
BigDecimal.toString = 80000000000
BigDecimal.toString = 8.0E+10
BigDecimal.toEngineeringString = 80E+9
小結:
1、double、Double是不精確的數,末尾的0.000001不見了
2、double、Double數值過大,轉換成String都會是科學計數法表示
2、new BigDecimal(num).toPlainString() 此方法能轉化為普通數字字串