背景
最近开发的过程中遇到一个很疑惑的问题,处理一些数据中,部分数据变成了科学计数法的形式保存到了数据库,很是头疼。最后发现是因为当数字达到一定精度,再转变为字符串的时候就会变成科学计数法的形式。
案例测试
比如如下代码的测试
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Double num1 = 0.0000009;
Double num2 = 0.09;
System.out.println("num1转字符串:"+num1);
System.out.println("num2转字符串:"+num2);
System.out.println("num1转字符串:"+String.valueOf(num1));
System.out.println("num2转字符串:"+String.valueOf(num1));
}
}
输出结果如下
这是因为System.out.println本身就会将要输出的对象强转为字符串,于是就会有第一个输出结果;
接下来就涉及到了我们的问题,科学计数法怎么转为字符串?
科学计数法怎么转为字符串
测试代码如下
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal bd = new BigDecimal("9.0E-7");
String str = bd.toPlainString();
System.out.println(str);
}
}
测试结果如下
如何判别字符串属于科学计数法的形式?
代码如下
public class Test {
public static void main(String[] args) {
String str = "6.0E-4";
String regx = "[+-]*\\d+\\.?\\d*[Ee]*[+-]*\\d+";
Pattern pattern = Pattern.compile(regx);
boolean isNumber = pattern.matcher(str).matches();
if (isNumber) {
BigDecimal bd = new BigDecimal(str);
String num = bd.toPlainString();
System.out.println(num);
}
}
}