Java 科學計數(shù)法轉成完整數(shù)字展示;double類型小數(shù)值不準確處理

首先是從Excel里面讀數(shù)據的時候,Excel里面的數(shù)據是數(shù)字,太大,其實也不是數(shù)字,就是個銀行卡號,復制進去,就自動成數(shù)字啦,然后就變成科學計數(shù)法啦,在使用poi讀取數(shù)據的時候,讀出來的就是科學計數(shù)法的數(shù)字,tostring之后,就不是我們想要的數(shù)據啦,這是一種情況。

還有一種情況,就是Excel里面的小數(shù)比如,1.2讀出來可能就是1.19999,這個就是double類型的小數(shù)的值不準確的問題啦。

說是可以使用 BigDecimal 類來解決這個問題,但是,這個類要想使用好,也得有一番實踐操作的。

先看代碼,

/**

* BigDecimal的測試,要精確。

* 還要使得科學計數(shù)法的數(shù)字,做完全的展示。

*/

private static void testBigDecimal() {

Double d = 1.6D;

//不準確的初始化

BigDecimal bigDecimal = new BigDecimal(d);

System.out.println(bigDecimal);

//使得結果精確的初始化姿勢

bigDecimal = new BigDecimal(d.toString());

System.out.println(bigDecimal);

bigDecimal = new BigDecimal("6.214822313132341212666E+18");

System.out.println(bigDecimal.toPlainString());

}

再看下運行的結果。

可以看到差別了嗎?

可以看到,這個構造函數(shù)傳進去的參數(shù)類型不同,出來的結果,就很不一樣。

所以,咱在使用這個類的時候,還是傳個字符串類型的參數(shù)進去,這樣就穩(wěn)當點。

這樣就解決啦,double類型的小數(shù)的不準確性的問題,不用去考慮,到底精確幾位小數(shù)的問題。同時,還把科學計數(shù)法的數(shù)字,給格式化成OK的字符串來展示。

最后,就是為啥把這篇文章分在poi的分類里面,因為就是在讀取Excel文檔的數(shù)據的時候,發(fā)現(xiàn)的問題。

它讀取每個cell的時候,會根據cell的類型不一樣,獲得的值也不一樣。

還有就是,要是數(shù)字的話,他竟然還有科學計數(shù)法的問題,以及小數(shù)值不準確的問題,比如1.6,讀出來可能就是1.59999

下面是獲取 cell的值的方法

/**

* 獲取單元格數(shù)據內容為字符串類型的數(shù)據

*

* @param cell Excel單元格

* @return String 單元格數(shù)據內容

*/

public static String getCellStringValue(HSSFCell cell) {

String strCell;

switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:

strCell = cell.getStringCellValue();

break;

case HSSFCell.CELL_TYPE_NUMERIC:

Double value = cell.getNumericCellValue();

BigDecimal bd1 = new BigDecimal(Double.toString(value));

strCell = bd1.toPlainString();

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

strCell = String.valueOf(cell.getBooleanCellValue());

break;

case HSSFCell.CELL_TYPE_BLANK:

strCell = "";

break;

default:

strCell = null;

break;

}

return strCell;

}

重點就是當是數(shù)字類型的時候,就需要好好處理一下啦。不然,讀取出來的數(shù)字要么是科學計數(shù)法,要么就是已經失去準確性的小數(shù)啦。

那就很尷尬啦

歡迎工作一到五年的Java工程師朋友們加入Java架構工程師:585550789

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容