【问题标题】:Casting from Java primitive int to double从 Java 原始 int 转换为 double
【发布时间】:2013-11-23 13:17:04
【问题描述】:

如果我打电话

methodName(5, 1/2);

它有签名

public static int methodName(int x, double y){
}

methodName 是否接收值为00.5y

【问题讨论】:

  • 为什么不试试呢?

标签: java types casting


【解决方案1】:

我认为您对参数(括号)感到困惑。在 java 中,每个方法都有一组参数(它们可能不包含值,例如:exampleMethod())。

参数是传递给方法的变量,因此在您的代码中调用时:

methodName() initialize it with methodName(x,y);

方法中的 x 和 y 只是您通过参数传递的值的指针。我建议您以不同的方式命名变量以避免这种混淆。例如:

int x;
int y;
methodName(int argX, double argY)
{

}

还要回答您的问题,int 会在小数点处截断其存储值,因此 5.9 会舍入为 5 而不是 6,因此如果您需要 y 的浮点变量,请将其声明为 float 或double,两者都可以,但是 java 库中的大多数方法都被编写为将 double 作为参数而不是浮点数

【讨论】:

    【解决方案2】:
    int y = 1/2
    

    由于您使用 1 (int) 和 2 (int) 进行除法,所以它是整数除法,因此 y = 0(余数 (%) 为 1)。

    【讨论】:

      【解决方案3】:
      int y = 1/2;
      

      在此代码中,y 将为 0;

      如果你想得到 0.5

      试试下面的代码:

      double y = 1.0 * 1 /2; //y is 0.5
      

      【讨论】:

      • 当你能做到1.0 / 2时为什么要1.0 * 1 / 2
      • 这只是一个例子,表明我们不能用 1/2 得到 0.5。我们需要将其中一个 int 值转换为 double 值。 1.0/2 或 1/2.0
      【解决方案4】:

      int y = 1/2;

      此时,y 为 0。如果您之后尝试将其转换为 double,它将为 0.0。它不记得它是如何获得它的价值的,只记得它的价值是什么。

      编辑:我认为编译器实际上会在编译时将 1/2 替换为 0。使代码与int y = 0字面上相同

      【讨论】:

      • 感谢您的澄清!
      【解决方案5】:

      它将评估为 0。

      你不能用上面的代码做很多事情。

      应该没有特定的理由将 y 存储为 int。

      试试这个:

      double y = 1/2.0;
      

      【讨论】:

      • 我今天要考试,以防万一出现这种情况^^
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2020-04-05
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多