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,因为我们不允许这样做。
答案 0 :(得分: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;
}
我有点改写它我会做这个问题的方式。如果你还记得我在你的另一个问题上贴了psuedo代码,这就是我的#34;编程&#34;版。
这就是我的代码的工作方式。
首先,它检查第一个字符[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
)。然后我加上它值。
其他一切都非常自我解释。
注意:强>
我自己测试了这段代码,但重要的是我没有添加对其他字符的无效字符串的检查。
答案 1 :(得分: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()
答案 2 :(得分: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;
}
}