java 科学计数法 -》正常写法

应女朋友的需要,试着写了一个类,实现科学计数法表示的数字转成正常写法形式 ,也不知道有木有用,写贴出来晒晒

代码如下,方法比较笨拙,有高效的方法还望告知在下,这厢有礼了。。。。。

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<end){
            str = str.replace(".", "");
            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<end){
            str = str.replace(".", "");
            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<count;i++){
            sb.append("0");
        }
        return sb.toString();
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值