1
public class Convert{
    public static void main(String args[]){
        String num="-12.0";
        int g=0,fnl=0;
        int exp=(num.indexOf(".")-1);
        String num2=num;
        if(num.charAt(0)==('-')){
            num=num.substring(1);
            System.out.println(num);
        }
        String numb=num;
        System.out.println(numb);
        int d=0;
        while(numb.charAt(d)!='.'){
                g=numb.charAt(d)-48;
                System.out.println(g);
                int k = 1;
                for(int f=0;f<exp;f++){
                k=(k*10);
                }
                fnl+=(k*g);
                d++;
                exp--;
                System.out.println(fnl);

        }

        num=(num.substring(d) );

         double num1= Double.parseDouble(num); 
         double finalnum=(fnl+num1);
         System.out.println(fnl);
         if(num2.charAt(0)=='-'){
             finalnum*=-1;
         }

    }
}

我创建了自己的方法来转换字符串的整数部分,它只适用于正数。:( 它应该适用于正数和负数。我使用 parse double 来转换小数点后的数字。我不能使用 parse double 将整个字符串转换为 double,因为我们不允许这样做。

4

3 回答 3

2
public static double toDouble(String a){
     int sign = 1;
     int start = 0;
     if(a.charAt(0) == '-'){
         start = 1;
         sign = -1;
     }
     double value = 0;
     boolean decimal = false;
     int exp = 0;

     for(int i = start; i < a.length(); i++){
         if(a.charAt(i) == '.'){
             if(decimal) return 0.0;
             decimal = true;
         }else{
             value += (a.charAt(i) - 48) * Math.pow(10,a.length() - i - 1);
         }

         if(decimal) exp++;
     }

     value =  value / Math.pow(10,exp);
     value *= sign;
      System.out.println(value);
     return value;

 }

我有点像我解决这个问题的方式重写了它。如果您还记得我在您的其他问题上发布了伪代码,这是我的“编程”版本。

这就是我的代码的工作方式。

首先,它检查第一个字符的符号,[0]然后将start位置增加到 1 而不是零,以开始循环越过-符号。

它循环遍历数组并检查是否有一个.如果它是它设置十进制变量为真而不是假。如果它在字符串中读取多个小数点,它将返回一个0.0我表示为失败值的值。但是,如果它不再拾取小数,它会增加指数值以查看需要跳转多少个空格。

value += (a.charAt(i) - 48) * Math.pow(10,a.length() - i - 1);

这行代码很有趣。a.charAt(i) - 48将字符转换为整数值。然后我将它乘以 10^(该值是十的幂,然后减去一来补偿1.0)。然后我添加它的价值。

其他一切都是不言自明的。

笔记:

我自己测试了这段代码,但重要的是我没有添加对其他字符的无效字符串的检查。

于 2013-09-14T09:08:08.833 回答
1
import java.util.regex.*;

public class DoubleParse{

public static void main(String[] args)
{

    String[] doubles = "12.3 4.08 5 -5 -5.4 4.0 0 0.0 5.800 asda".split(" ");
    for (String num: doubles)
    {
        System.out.println(parse_double(num));
    }
}


final static Pattern double_format = Pattern.compile("^(\\-?)[0]*([0-9]+)(?:\\.([0-9]+?)[0]*)?$");


public static double parse_double(String num)
{

    Matcher m = double_format.matcher(num);
    if (!m.matches())
        throw new IllegalArgumentException(num+" is not in proper format!");

    int sign = num.charAt(0)=='-'? -1 : 1;
    int point = num.indexOf('.');
    int whole = parse_int(num.substring(sign==-1? 1 : 0, (point!=-1)? point : num.length()));
    double fraction=0;
    if (point != -1)
    {
        String fractionS = num.substring(point+1);
        fraction = parse_int( fractionS)/Math.pow(10, fractionS.length());
    }
    return (whole+fraction)*sign;
}

public static int parse_int(String numS)
{
    int num=0;
    for (int i=0;i<numS.length();i++)
    {
        num *= 10;
        num += (int) (numS.charAt(i)-'0');
    }
    return num;
}
}
于 2013-09-14T09:26:15.090 回答
1
int g=0,fnl=0;
String input  = "-12.0";
String temp = input;
String forDecimalPart = input;
if(input.charAt(0)=='-') {
    temp=input.substring(1);
}

int exp = temp.indexOf(".");
System.out.println(exp);
int d=0;
while(temp.charAt(d)!='.') {
    g=temp.charAt(d)-48;
    int k = 1;
    for(int f=1;f<exp;f++) {
      k*=10;
    }
    fnl+=(k*g);
    d++;
    exp--;
    System.out.println(fnl);
}

forDecimalPart=temp.substring(d) ;

double num1= Double.parseDouble(forDecimalPart); 
double finalnum=(fnl+num1);
if(input.charAt(0)=='-'){
finalnum*=-1;
}
System.out.println(finalnum);

我已经给了你答案,因为你已经努力想出至少这个代码。祝你好运:) 我已经编写了类似于您的问题的代码,而没有添加来自其他类的任何额外方法,例如 Math.pow()

于 2013-09-14T08:55:16.247 回答