最近在使用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))
POI資料的excel匯出
第一步 引入jar包 版本選擇 org.apache.poi poi3.17 org.apache.poi poi ooxml 3.17 第二步 工具類 第三步 controller層 通過以上的三步走,基本的匯出功能實現。但實際中可能不會這麼簡單,也會有很多負責的業務邏輯。例如 第 步 更改工具類...
解決poi匯出excel日期格式為數字的問題
最近在做使用poi匯出excel匯出 時,日期為純數字,並不是按照日期格式匯出 如下圖顯示 poi操作excel org.apache.poi groupid poi ooxml artifactid 3.8 version dependency 在這裡插入 片 org.apache.poi gro...
POI匯出Excel檔案
workbook workbook exportservice.exportfile request,student outputstream out null try catch ioexception e finally catch exception e 實現類 設定各列寬度 short st...