休息了好久,今天终于开工了。一个同事年前写的一段代码,今天测试的时候出了点问题,便找到我,我看了看他的代码,大概知道了原因。他要做的功能是采取POI导出数据为Excle,而且年前测试也没发现什么问题,但是由于某些原因,需要我导部分测试数据给他,所以测试出现问题便找到了我。
说来也挺有意思,导给他的数据是今儿现造的,其中涉及的金额一项,我都设置的特别大,都是几亿几亿的造,导致他导出来的表格金额这一项,采用的是科学记数法,他也没想到,其中原因是因为Mysql读取值很大的Double类型数据时会采用科学计数法,让他打了日志看,他也发现了问题所在。那么,如何解决呢?
public static void main(String[] args) {
Double dabo = 88664433210.88d;
System.out.println(dabo);
/**
* 方法一
*/
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);// 设置小数位
String replace = df.format(dabo).replace(",", ""); //去掉千分符号
System.out.println(replace);
/**
* 方法二
*/
java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
nf.setGroupingUsed(false);
String scoreStr = nf.format(dabo);
System.out.println(scoreStr);
/**
* 方法三
*/
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(0);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMaximumFractionDigits(2);// 设置小数位
String format = numberFormat.format(dabo).replace(",", ""); //去掉千分符号;
System.out.println(format);
}