【问题标题】:Division in Java always results in zero (0)? [duplicate]Java中的除法总是导致零(0)? [复制]
【发布时间】:2012-05-04 20:25:37
【问题描述】:

下面的函数从 sharedpreferences 中获取两个值,即体重和身高,我使用这些值来计算 BMI, 当我打印值的内容时,我得到了我在 sharedprefs 中输入的值(这很好)但是当我对它们运行除法运算时,结果总是得到 0.. 哪里出错了?

public int computeBMI(){
    SharedPreferences customSharedPreference = getSharedPreferences(
            "myCustomSharedPrefs", Activity.MODE_PRIVATE);

    String Height = customSharedPreference.getString("heightpref", "");
    String Weight = customSharedPreference.getString("weightpref", "");

    int weight = Integer.parseInt(Weight);
    int height = Integer.parseInt(Height);
    Toast.makeText(CalculationsActivity.this, Height+" "+ Weight , Toast.LENGTH_LONG).show();

    int bmi = weight/(height*height);
    return bmi;

}

【问题讨论】:

  • 你在做整数除法。乘以 1.0 使其成为浮点数。

标签: java android division


【解决方案1】:

你正在做整数除法。

您需要将一个操作数强制转换为double

【讨论】:

    【解决方案2】:

    您正在进行整数除法,将值转换为float,并将变量bmi 的数据类型更改为float

    像这样:

    float bmi = (float)weight/(float)(height*height);
    

    您还应该将方法的返回类型 public int computeBMI() 更改为 float

    我建议你阅读thisstackoverflow 问题。

    Here您有一个Java 原始数据类型列表及其完整描述。

    希望对你有帮助!

    【讨论】:

    • 为什么浮动而不是加倍?
    • 取决于您的需求以及在存储该值时需要什么样的精度@JohnnyCoder
    • 但在某些情况下浮动可能就足够了
    【解决方案3】:

    因为bmi 是一个整数。将bmiWeight, Height 声明为浮点数。当您在除法中使用整数时,您将得到整数除法。当你使用双精度/浮点数时,你会得到浮点除法

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2014-04-08
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多