【问题标题】:I need to convert an int variable to double [duplicate]我需要将一个 int 变量转换为 double [重复]
【发布时间】:2012-11-06 14:17:28
【问题描述】:

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

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

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

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

【问题讨论】:

  • ((double)b1) 而不仅仅是b1;同样对于b2. 将传播到double
  • 假设 a 和 b 变量是整数,只需进行双重类型转换

标签: java


【解决方案1】:

您必须将除法运算符的一个(或两个)参数转换为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;

这以相同的方式工作,但现在有一个 implicit 强制转换为 double。这种从intdouble 的转换是widening primitive conversion 的一个示例。

【讨论】:

  • 只要在这里指出风险,b1 * a22 - b2 * a12 将导致int,与行列式相同。导致一些计算错误,因为在( ) 中的操作之后会进行转换。
【解决方案2】:

可以通过casting将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)));

祝你好运。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 无法从int 转换为double,但doubleValue () 帮助了我,谢谢。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2011-02-23
      • 2011-05-10
      • 1970-01-01
      相关资源
      最近更新 更多