68

我的朋友正在尝试将某种计算作为课堂任务,他遇到了一些麻烦……希望您能帮助他。

问题是他从用户那里获得了 int 的输入(它必须是,它是任务的一部分)。他试图在下面的代码中将其转换为双精度,但这不起作用。结果无论如何都是int。

double firstSolution = ((b1 * a22 - b2 * a12) / (a11 * a22 - a12 * a21));
double secondSolution = ((b2 * a11 - b1 * a21) / (a11 * a22 - a12 * a21));

如果你需要更多解释,我会问他。提前致谢!

4

4 回答 4

103

您必须将除法运算符的一个(或两个)参数转换为double

double firstSolution = (b1 * a22 - b2 * a12) / (double)(a11 * a22 - a12 * a21);

由于您两次执行相同的计算,我建议重构您的代码:

double determinant = a11 * a22 - a12 * a21;
double firstSolution = (b1 * a22 - b2 * a12) / determinant;
double secondSolution = (b2 * a11 - b1 * a21) / determinant;

这以相同的方式工作,但现在有一个隐式强制转换为 double。这种从intto的转换是扩大原语转换double的一个例子。

于 2012-11-06T14:19:19.373 回答
46

转换为 double 可以通过将 int转换为 double 来完成:

您可以使用这种机制将 int 转换为 double,如下所示:

int i = 3; // i is 3
double d = (double) i; // d = 3.0

替代方案(使用 Java 的自动类型识别):

double d = 1.0 * i; // d = 3.0

在您的代码中实现这一点将类似于:

double firstSolution = ((double)(b1 * a22 - b2 * a12) / (double)(a11 * a22 - a12 * a21));
double secondSolution = ((double)(b2 * a11 - b1 * a21) / (double)(a11 * a22 - a12 * a21));

或者,您可以使用 double (1.0) 类型的硬参数让 java 为您工作,如下所示:

double firstSolution = ((1.0 * (b1 * a22 - b2 * a12)) / (1.0 * (a11 * a22 - a12 * a21)));
double secondSolution = ((1.0 * (b2 * a11 - b1 * a21)) / (1.0 * (a11 * a22 - a12 * a21)));

祝你好运。

于 2012-11-06T14:23:28.137 回答
12

Integer我认为您应该通过调用方法强制转换变量或使用类doubleValue()

于 2012-11-06T14:19:42.393 回答
5

要么使用其他人已经说过的强制转换,要么将 int 变量之一乘以1.0

double firstSolution = ((1.0* b1 * a22 - b2 * a12) / (a11 * a22 - a12 * a21));
于 2012-11-06T14:21:06.120 回答