poi导出的excel的数字⼩数位过多
最近在使⽤Apache的POI组件对Excel进⾏操作,在对excel导出的时候,导出的数字本来只有两位⼩数,得到的结果就变成了很多位⼩数。如下⾯的图所⽰:bigdecimal格式化两位小数
虽然对单元格使⽤了setCellStyle,但还是治标不治本,显⽰虽然是只显⽰两位⼩数了,但是点开还是有很长的⼀串⼩数位,这很不爽,这什么原因导致的呢?我们来看看。
我⾸先debug看⼀下,在设置单元格的值时候,数据⼀切正常,数据库读出的数据也为0.44,没看出⼀点猫腻。随后我再仔细看看,在看到cell.setCellValue(double arg0)⾥⾯的参数是double的时候,感觉到⼀点不对劲,再看看Model,发现该成员变量是float,敏感的同学应该⼀眼就看出来了,没错,就是float转double的时候精度变得更细了。
关于float和double的关系,我推荐看⼀下这个⽂章:。⼤概就是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))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论