【问题标题】:Why is my int 0? [duplicate]为什么我的 int 为 0? [复制]
【发布时间】:2012-11-30 16:28:44
【问题描述】:

可能重复:
Why does int exp1 = 14/20*100; equals ‘0’ in java?

我正在使用这个:

int newWidth = Math.round(297 * (40 / 414));

在代码中,数字实际上是变量,但它们是它们所持有的,当我运行代码时,newWidth 返回为 0,而我期待的是 28 或 29。我看不出有什么问题这里...

【问题讨论】:

标签: java math


【解决方案1】:

40 / 414 立即四舍五入为0,因为它仅适用于整数。您必须将其中一个操作数转换为 double/float 或立即使用 double

int newWidth = (int)Math.round(297 * (40.0 / 414));

或:

int newWidth = (int)Math.round(297 * ((double)40 / 414));

【讨论】:

    【解决方案2】:

    因为40/414等于0,所以297*0 = 0Math.round(0) = 0

    改用双打。

    【讨论】:

      【解决方案3】:

      int newWidth = (int)Math.round(297 * (40<b>d</b> / 414));

      【讨论】:

        【解决方案4】:

        更改为int newWidth = (int)Math.round(297 * (40.0 / 414));

        【讨论】:

          【解决方案5】:

          Java 中的 int 不使用小数位...因此您应该为此使用 double。它给你一个 0 因为在 () 40/ 414 = 0 内。

          【讨论】:

            【解决方案6】:

            问题从 40/414 开始:这是整数除法,它返回一个 int。在这种情况下:0。

            要修复它,请将其中一个整数转换为双精度或浮点数,例如((浮点数)40 / 414)。

            【讨论】:

              【解决方案7】:

              40/414 的结果为零。这是整数除法的结果。将分子或分母更改为浮点值以获得所需的结果

              【讨论】:

                【解决方案8】:

                将我的 2 美分投入...如前所述,问题在于整数除法。另一种强制此除法将结果视为双精度的方法:

                int newWidth = Math.round(297 * (40.0 / 414));
                

                【讨论】:

                  【解决方案9】:

                  40/414 舍入为 0。

                  你可能想要的是

                  int newWidth = (297 * 40) / 414;
                  

                  【讨论】:

                    猜你喜欢
                    • 2017-12-02
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-05-16
                    • 1970-01-01
                    • 2023-04-05
                    • 1970-01-01
                    相关资源
                    最近更新 更多