【问题标题】:Integer is printed out a different value from what it actually is? [duplicate]整数打印出的值与实际值不同? [复制]
【发布时间】:2014-07-16 05:57:22
【问题描述】:

所以我有这个代码:

int x = 435;
int y = x / 2 * 5;

如果我手动计算 y,我得到的结果是 1087.5。但是当我打印出整数 y 时,我得到的结果是 1085。这是为什么呢?它不应该四舍五入到 1088 或 1087 吗?

【问题讨论】:

    标签: java


    【解决方案1】:

    这是因为整数运算

    int/int = int
    

    所以,435/2 将是

    435/2 = 217
    

    还有

    217*5 = 1085
    

    你能做什么?根据需要转换值:

    int y = (int)((float)x / 2 * 5);
    

    或者如果你想要一个真实的结果,将变量y声明为float

    float y = (float)x / 2 * 5;
    

    【讨论】:

    • 非常感谢!我不敢相信我没有看到。
    • 或者(至少在这种情况下):先乘,再除。
    【解决方案2】:

    这会将每个部分的结果保存为 int

    所以

    435 / 2 == 217
    217 * 5 == 1085
    

    【讨论】:

      【解决方案3】:

      x/2=217217 * 5 == 1085int值是原因

      您正在划分intx 所以结果将是int(int/int=int)

       x/2=217
      

      然后

       217*5=1085
      

      【讨论】:

        【解决方案4】:

        试试这个:

            int x = 435;
            double y = ((double) x / 2) * 5;
        

        y 不能是 int (否则你会失去精度)。此外,x / 2 将为您生成一个 integer 值,因此您需要将其转换为 doublefloat

        【讨论】:

          【解决方案5】:

          Java 正在使用整数数学,这个

          int x = 435;
          int y = x / 2 * 5;
          

          等价于

          int x = 435;
          int y = x / 2; // <-- 217
          y *= 5;        // <-- 1085
          

          如果你想反过来试试,

          int x = 435;
          int y = (int) Math.round(((double) x / 2) * 5); // <-- 1088
          

          【讨论】:

            【解决方案6】:

            答案是正确的-: 435/2 = 217.5,因为声明为 int,四舍五入为 217 217*5 = 1085 这是必需的答案。

            【讨论】:

              【解决方案7】:

              当你将 435 除以 2 时。 它存储 217 而不是 217.5,因此在乘以 217*5= 1085

              您正在尝试将浮点值存储到 INT 中,从而获得截断值。

              另外,不带括号,编译器会根据运算符的优先级,从左到右依次开始执行。

              你的代码

              int x = 435; int y = x / 2 * 5;

              实际上是在执行下面的操作。

              1. 分配 x = 435;
              2. 首先除以 y = x / 2; // 这里存储 y=217
              3. 然后乘以 y=y*5; // 最后 y= 1085

              使用 int 会将 217.5 截断为 217,因此您会得到该答案。 使用 double 或 float 存储您想要的答案类型

              int x = 435; 双倍 y = y=(x/2)*5

              这将为您提供所需的答案。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多