我试图将一个混合分数(如“1 1/2”)从一个命令行参数转换为一个小数(如1.5)。这是我的Java课本上的一个问题,我遇到了麻烦。这是我目前所知道的。它适用于像“1/2”这样的分数,并将其转换为0.5,但不是混合数
class Fractions {
static public void main(String[] args) {
double output = 0;
String input =args[0];
String[] inputArray = input.split(" ");
if (input.contains("/")) { //checks if it has a slash
if (inputArray.length == 2) { // this is to check if it is a mixed number but it fails to check
double integer = Double.parseDouble(inputArray[0]);
String[] numbers = input.split("/");
double top = Double.parseDouble(numbers[0]);
double bottom = Double.parseDouble(numbers[1]);
output = integer + top/bottom;
} else { //If it is not a mixed number and a fraction it correctly prints the double form
String[] numbers = input.split("/");
double top = Double.parseDouble(numbers[0]);
double bottom = Double.parseDouble(numbers[1]);
output = top/bottom;
}
} else { //otherwise it turns the input into a double
output = Double.parseDouble(input);
}
System.out.println(output); //prints the number as a double
}
}
3条答案
按热度按时间ovfsdjhp1#
“这是我到目前为止所拥有的。它适用于像“1/2”这样的分数,并将其转换为0.5,但不是混合数。
在 numbers 赋值过程中,input 值解析不正确。
这将产生 “1 1” 和 “2”。
这里有一个例子。
此外,您还可以使用 * BigDecimal * 类。
相反,如果你需要将值转换回分数。
下面是一个示例用法。
ngynwnxp2#
问题出在这一行:
你拆分了
input
变量,而不是混合值的第二部分:inputArray[1]
。正确的代码应该是:wd2eg0qa3#
我相信你已经意识到了这一点,但我想我会把它扔在无论如何。由于整数和实际分数之间存在空格,因此应将命令行参数括在引号内,例如:
myapp.jar "1 1/2"
。正如您已经意识到的,您对命令行参数(FractionString)的解析对于您想要做的事情并不完全正确。下面是一个runnable,演示了如何做到这一点。它有点冗长,但是,它也进行了大量的验证,并显示(在我看来)如何在使用时最小化问题。请务必阅读代码中的所有注解: