poi匯出的excel的數字小數位過多?

Gin.p發表於2016-01-20

  最近在使用Apache的POI元件對Excel進行操作,在對excel匯出的時候,匯出的數字本來只有兩位小數,得到的結果就變成了很多位小數。如下面的圖所示:

  雖然對單元格使用了setCellStyle,但還是治標不治本,顯示雖然是隻顯示兩位小數了,但是點開還是有很長的一串小數位,這很不爽,這什麼原因導致的呢?我們來看看。

  我首先debug看一下,在設定單元格的值時候,資料一切正常,資料庫讀出的資料也為0.44,沒看出一點貓膩。隨後我再仔細看看,在看到cell.setCellValue(double arg0)裡面的引數是double的時候,感覺到一點不對勁,再看看Model,發現該成員變數是float,敏感的同學應該一眼就看出來了,沒錯,就是float轉double的時候精度變得更細了。

  關於float和double的關係,我推薦看一下這個文章:float浮點數的二進位制儲存方式及轉換。大概就是double比float擁有更長的指數位和尾數位,在指數位不影響的情況下,float的數值轉化為二進位制數值的時候,小數乘以2的時候無法得出1,導致尾數位是無限的01,而double擁有更長的尾數位,所以double的01比float更多,得出的結果也就不一樣,也就是說double比float的精度更精確。

  那麼怎麼解決這個問題呢?其實就是float轉double的精度問題,

  1、將Model的成員變數改為double。(不幹,太麻煩,還要改資料庫什麼的)

  2、使用BigDecimal的setScale

  3、Double.parseDouble(String.valueOf(number))

相關文章