美文网首页
LeetCode 第 A 题:字符串转 double

LeetCode 第 A 题:字符串转 double

作者: 放开那个BUG | 来源:发表于2021-07-06 21:34 被阅读0次

    1、前言

    给定一个字符串,将字符串转换为 double 类型的数字,不能用 jdk 自带的工具。

    2、思路

    这道题的思路其实很简单,将字符串分为两个部分,整数与小数部分。我们先求整数部分,求完后再求小数部分。所以,做这种题的思路是,先求整数,再求小数,然后完善剩下的格式的问题。

    3、代码

    public class QA_StringToDouble {
    
    
        public double stringToDouble(String num) throws Exception {
            double sumA = 0, sumB = 0;
    
            int first = num.charAt(0);
            if(first != '+' && first != '-' && (first < '0' || first > '9')){
                throw new Exception("格式不正确");
            }
    
            int i = 0;
            boolean positive = true;
            if(first == '-'){
                positive = false;
                i++;
            }else {
                i++;
            }
    
    
            for (; i < num.length(); i++) {
                if(num.charAt(i) != '.' && (num.charAt(i) < '0' || num.charAt(i) > '9')){
                    throw new Exception("格式不正确");
                }
                if(num.charAt(i) == '.'){
                    i++;
                    break;
                }
                sumA = 10 * sumA + (num.charAt(i) - '0');
            }
    
            // 这边默认 i 是小数的后一位
    //        int i = 1;
    //        for(; i < num.length(); i++){
    //            if(num.charAt(i) < '0' || num.charAt(i) > '9'){
    //                throw new Exception("格式不正确");
    //            }
    //
    //            j *= 10;
    //            sumB = 10 * sumB + (num.charAt(i) - '0');
    //        }
            int j = num.length() - 1;
            for(; j >= i; j--){
                if(num.charAt(j) < '0' || num.charAt(j) > '9'){
                    throw new Exception("格式不正确");
                }
    
                sumB = (sumB + (num.charAt(j) - '0')) * 0.1;
            }
    
    
            return positive ? sumA + sumB : (-1) * (sumA + sumB);
        }
    
        public static void main(String[] args) throws Exception {
            System.out.println(new QA_StringToDouble().stringToDouble("+156.788999999999"));
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第 A 题:字符串转 double

          本文链接:https://www.haomeiwen.com/subject/hgrdyltx.html