String-Double不适用于负数

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,因为我们不允许这样做。

 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; } 

我有点改写它我会做这个问题的方式。 如果你还记得我在你的另一个问题上贴了psuedo代码,这是我的“编程”版本。

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

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

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

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

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

其他一切都非常自我解释。

注意:

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

 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 

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

 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