gpt4 book ai didi

java - String-Double 不适用于负数

转载 作者:行者123 更新时间:2023-11-29 03:29:56 24 4
gpt4 key购买 nike

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;

}

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

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

首先它检查第一个字符 [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)。然后我给它加值。

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

注意:

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

关于java - String-Double 不适用于负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com