在java中,把一個double或者BigDecimal的小數轉換為字符串時,經常會用科學計數法表示,而我們一般不想使用科學計數法,可以通過:
DecimalFormat a = new DecimalFormat("#,##0.00000000");
System.out.println(a.format(11111111.0000001000000001));
的方式來格式化輸出字符串。
對於BigDecimal的小數,如果制定精度<=6, 則可以放心的使用其toString函數。但是對於>6的精度,有可能會使用科學計數法,查看器代碼有如下判斷:
long adjusted = -(long)scale + (coeff.length-1);
if ((scale >= 0) && (adjusted >= -6)){
非科學計數法的toString.
}
其中scale指BigDecimal的精度,
coeff對應使用BigInteger存儲的值的toString字符串, coeff = intVal.abs().toString().toCharArray(),也就是說BigDecimal在對應精度下的整數值,例如BigDecimal ob = new BigDecimal(0.00000011), ob的精度為7, 則coeff="1";如果ob=new BigDecimal(0.10000011), 則coeff="1000001";如果ob=new BigDecimal(0.00000001), 則coeff="0";
多使用bigdecimal 少使用double
