为什么我的变量没有正确划分?

时间:2013-12-16 10:52:44

标签: java variables double

我的两个变量没有正确划分存在问题。我初始化了所有这些,除了“yFactor”之外,它们都能顺利运行。 以下是导致我出现问题的代码片段:

        range = maximum - minimum;
        try{
            heightFactor = (580.0/range);
        } catch (Exception e){
            heightFactor = 0.0;
        }
        try{
            yFactor = (maximum/range);
        } catch (Exception e){
            yFactor = 1.0;
        }
        System.out.println(currentSavings);
        System.out.println(savingsBeforeRetirement);
        System.out.println(savingsAfterRetirement);
        System.out.println(minimum);
        System.out.println(maximum);
        System.out.println(range);
        System.out.println(heightFactor);
        System.out.println(yFactor);

此代码的输出是

-318.3508771930617
10958
-318
-318
10958
11276
0.05143667967364313
0.0

请注意,除了yFactor之外,上面的每个变量对于我输入的参数都是“正确的”。

以下是此课程的完整代码(如果您需要):http://pastebin.com/UnHUEdZM

非常感谢任何人提供的任何帮助!

编辑:max,min,range,savingsbeforeretirement和savingsafterretirement是整数,heightFactor和yFactor是双打

4 个答案:

答案 0 :(得分:1)

我的猜测是范围和最大值都是int类型,因此除法将产生0.这将转换为(double或float)yFactor,其值为0.0

答案 1 :(得分:0)

maximumrange都定义为int,所以

 yFactor = (maximum/range);

执行整数除法,在您的情况下,使用0正确生成。

如果要进行浮点除法,则必须至少将一个值转换为float:

 yFactor = ((float)maximum/range);

答案 2 :(得分:0)

这里的问题是你正在对整数执行除法,这将导致为0.将int更改为floatdouble。另一种选择是,如果您在分割前将其投放到float / double

答案 3 :(得分:0)

从您的粘贴箱中,我看到您有:

 int maximum;
 int minimum;            
 int range;

您的部门将在整数算术中执行。也就是说,任何部分都将丢失。

要解决此问题,请将其中一个数字提升为浮点数:

yFactor = (double)maximum / range;

然后将以浮点进行除法。