应女朋友的需要,试着写了一个类,实现科学计数法表示的数字转成正常写法形式 ,也不知道有木有用,写贴出来晒晒
代码如下,方法比较笨拙,有高效的方法还望告知在下,这厢有礼了。。。。。
public static String ScientificNotationToStr(String original){
//正则表达式判断 original是否符合科学计数法格式 ?:0 or 1、 *:1 or 多位、+:1 or 多位
String regx = "[+-]?[0-9]+.[0-9]+[Ee][+-]?\\d+";
Pattern pattern = Pattern.compile(regx);
Matcher matcher = pattern.matcher(original);
if(matcher.matches()){//如果匹配 继续执行
//统一转化成E格式
original = original.toUpperCase();
char goHead = original.charAt(original.indexOf('E')+1);
String before = original.substring(0, original.indexOf('E'));
String after = null;
int moveCount = 0;
if(goHead == '-'){
after = original.substring(original.indexOf('E')+2);
moveCount = Integer.valueOf(after);
original = GoHead(before,moveCount);
}else{
if(goHead == '+'){
after = original.substring(original.indexOf('E')+2);
}else{
after = original.substring(original.indexOf('E')+1);
}
//移动位数
moveCount = Integer.valueOf(after);
original = moveAfter(before,moveCount);
}
}
return original;
}
/**
* 小数点向后移动,
* @param str el: 1.1111 11111
* @param count el: 8 so may original: 1.1111E2 111.11
* @return
*/
public static String moveAfter(String str, int count){
int start = str.indexOf('.');
int end = str.length()- str.indexOf('.')-1; //小数点后的位数
if(count == end){//如果相等,则直接返回去掉小数点的字符串
return str.replace(".", "");
}else if(count
str = str.substring(0,start+count).concat(".").concat(str.substring(start+count));
}else{
str = str.replace(".", "");
str = str.concat(addZero(count-end));
}
return str;
}
/**
* 小数点向前移动,
* @param str el: 11.1111
* @param count el: 4 so may original: 1.1111E2 111.11
* @return
*/
public static String GoHead(String str, int count){
int end = str.indexOf('.'); //小数点前的位数
String prefix = "0.";
if(count == end){//如果相等,则直接在字符串前加上前缀返回
return prefix.concat(str.replace(".", ""));
}else if(count
str = str.substring(0,end-count).concat(".").concat(str.substring(end-count));
}else{
str = str.replace(".", "");
str = prefix.concat(addZero(count-end)).concat(str);
}
return str;
}
//辅助方法
public static String addZero(int count){
StringBuffer sb = new StringBuffer();
for(int i=0;i
}
return sb.toString();
}