我需要创建一个将字符串转换为double的程序。
public class Convert{
public static void main(String args[]){
String num="124023211.123";
int d=0,g=0,c=0,fnl=0,h=0,v=0;
double fnl2=0;
int exp=(num.indexOf(".")-1);
while(num.charAt(d)!='.'){
g=num.charAt(d)-48;
int k = 1;
for(int f=0;f<exp;f++){
k=(k*10);
}
fnl+=(k*g);
d++;
exp--;
}
num=(num.substring(d+1) );
//System.out.println(fnl);
//System.out.println(num);
while(h!=num.length()){
v=num.charAt(h)-48;
double j=1;
int exp1=num.length();
for(int f1=0;f1<exp1;f1++){
j*=.10;
}
fnl2+=(h*j);
j++;
h++;
}
System.out.println(fnl2);
}
}
第一个while循环转换字符串的int部分,它正常工作。但第二个while循环应该导致字符串的小数部分。我很难,因为双倍结果导致巨大的十进制数,并且它破坏了转换,并且第二个while循环打印出错误的答案。
答案 0 :(得分:1)
int exp1=num.length();
这一行是您问题的一部分。你的循环将始终循环num.length()次,但num的长度不变(所以总是3,在你的情况下)。这导致所有三个数字都被视为千分之一。
另外,请记住十进制值不能用IEEE-754格式精确表示。通过完成所有这些乘法和加法,您将在结果中引入错误。 Double.Parse将为您的数字提供最佳近似值。
答案 1 :(得分:0)
您可以执行以下操作
String s="124023211.123";
int i;
double result = 0.0f, result2 = 0.0f;
for (i = 0; i < s.length(); i++)
if (s.charAt(i) == '.')
break;
else
result = result * 10 + (s.charAt(i) - '0');
for (i = s.length()-1 ; i>=0 ; i--)
if (s.charAt(i) == '.')
break;
else
result2 = result2 / 10 + (s.charAt(i) - '0');
if (i>=0)
result += result2/10;
测试:11,3.0,6.000000,0505.000,.12和124023211.123 当然,你不会总是得到确切的值,因为有时它会被写为double的表达式,就像你提供的数字一样。并且有些数字在二元系统中没有任何表示。
答案 2 :(得分:0)
试试这个,它正在测试有效数据
public class Sample1 {
public static void main(String args[]){
String num="122312312.2331231";
String s1 = num.substring(0,num.indexOf("."));
String s2 = num.substring(num.indexOf(".") + 1,num.length());
System.out.println(s1);
System.out.println(s2);
double n1 = 0;
double n2 = 0;
for(int i=0;i<s1.length();i++){
double d = s1.charAt(i) - '0';
n1 = n1*10;
n1 += d;
}
System.out.println(n1);
for(int i=0;i<s2.length();i++){
double d = s2.charAt(i) - '0';
//n2 = n2/;
n2 += d/number(i+1);
}
System.out.println(n1+n2);
}
public static long number(int n2){
long d = 10l;
if(n2>1)
d = 10 * number(n2-1);
return d;
}
}
Gautam Sonar