我有双重价值.我希望将它存储在带有E表示法的String中(在J2ME中)
例
双倍价值6.887578324E9想要显示为6887578342
您可以创建自己的方法来执行此操作,也可以使用一些现有的库.例如,Javolution为您提供了类和方法TypeFormat.format(double d,int digits,boolean scientific,boolean showZero,Appendable a)Check Javolution,它有很多很好的实用程序,但是如果你需要的只是格式化数字,只需编写自己的方法.这是对大数字的快速破解
private static String nosci(double d) {
if(d < 0){
return "-" + nosci(-d);
}
String javaString = String.valueOf(d);
int indexOfE =javaString.indexOf("E");
if(indexOfE == -1){
return javaString;
}
StringBuffer sb = new StringBuffer();
if(d > 1){//big number
int exp = Integer.parseInt(javaString.substring(indexOfE + 1));
String sciDecimal = javaString.substring(2, indexOfE);
int sciDecimalLength = sciDecimal.length();
if(exp == sciDecimalLength){
sb.append(javaString.charAt(0));
sb.append(sciDecimal);
}else if(exp > sciDecimalLength){
sb.append(javaString.charAt(0));
sb.append(sciDecimal);
for(int i = 0; i < exp - sciDecimalLength; i++){
sb.append('0');
}
}else if(exp < sciDecimalLength){
sb.append(javaString.charAt(0));
sb.append(sciDecimal.substring(0, exp));
sb.append('.');
for(int i = exp; i < sciDecimalLength ; i++){
sb.append(sciDecimal.charAt(i));
}
}
return sb.toString();
}else{
//for little numbers use the default or you will
//loose accuracy
return javaString;
}
}
Run Code Online (Sandbox Code Playgroud)