无法在构造函数中为类成员分配正确的浮点值

时间:2015-08-15 11:26:30

标签: java constructor initialization

我的构造函数出现了奇怪的问题。我写了类“训练”,它代表了一些测量参数。 8个成员中的5个直接初始化,而其余部分需要在将值分配给它们之前执行简单计算。我的问题是这些3个浮点变量在创建对象后包含0。我不知道出了什么问题。

public class Training {
    int hr1;            
    int hr2;            
    int hr3;            
    int hr4;
    String date;    

    float wsr;                                               //problem
    float hrDec1;                                            //problem
    float hrDec5;                                            //problem



public Training(int hr1, int hr2, int hr3, int hr4, String date) {
    this.hr1 = hr1;
    this.hr2 = hr2;
    this.hr3 = hr3;
    this.hr4 = hr4;
    this.date = date;

    this.wsr =    ( (hr2 - hr4) / (hr2 - hr1) ) * 100.0f;   //problem
    this.hrDec1 = ( (hr2 - hr3) / hr2 ) * 100.0f;           //problem
    this.hrDec5 = ( (hr2 - hr4) / hr2 ) * 100.0f;           //problem

}

public String toString(){
    return date+" | WSR: "+wsr +", HRdec1: "+hrDec1 +", HRdec5: "+ hrDec5;
}

}

打印新对象之后

Training t = new Training(90, 190, 130, 110, "15.08.2015"); 
System.out.println(t);

我会收到:

15.08.2015 | WSR: 0.0, HRdec1: 0.0, HRdec5: 0.0

浮点值包含0 - 为什么? 提前谢谢!

4 个答案:

答案 0 :(得分:0)

您正在进行INTEGER部门。在进行除法之前,请尝试将整数转换为双精度:

 this.wsr =    ( (hr2 - hr4) / ((hr2 - hr1) * 1.0) ) * 100.0f;   
 this.hrDec1 = ( (hr2 - hr3) / (hr2 * 1.0) ) * 100.0f;          
 this.hrDec5 = ( (hr2 - hr4) / (hr2 * 1.0) ) * 100.0f;

答案 1 :(得分:0)

您正在执行int a/int b,然后将结果乘以100.0f。如果b > aa/b(整数除法)返回零。因此,稍后乘以100.0f并不能满足您的期望。你应该在分裂之前将它相乘。

更改

this.wsr =    ( (hr2 - hr4) / (hr2 - hr1) ) * 100.0f;   //problem
this.hrDec1 = ( (hr2 - hr3) / hr2 ) * 100.0f;           //problem
this.hrDec5 = ( (hr2 - hr4) / hr2 ) * 100.0f; 

this.wsr =    ( (hr2 - hr4)*100.0f)/ (hr2 - hr1) ;   
this.hrDec1 = ( (hr2 - hr3)*100.0f) / hr2;           
this.hrDec5 = ( (hr2 - hr4)*100.0f) / hr2 ; 

答案 2 :(得分:0)

您对浮点值的计算使用整数值hr1hr2hr3hr4。在Java中,整数除法的结果也是整数。

因此,如果你做一个导致数字不是整数的divison,那么java会将其舍入。

在你的情况下,计算首先向下舍入为零,因为它是一个整数除法,被除数和除数都是整数。

要强制执行浮点除法,只需将其中一个值转换为浮点值即可,例如通过浮点数浮点数(在本例中为100.0f):

this.wsr = ((hr2 - hr4) * 100.0f)/ (hr2 - hr1);   
this.hrDec1 = ((hr2 - hr3) * 100.0f) / hr2;           
this.hrDec5 = ((hr2 - hr4) * 100.0f) / hr2;

答案 3 :(得分:0)

您可以在代码中更改以下内容:

this.wsr =    ( (float)(hr2 - hr4) / (hr2 - hr1) ) * 100.0f;   
this.hrDec1 = ( (float)(hr2 - hr3) / hr2 ) * 100.0f;           
this.hrDec5 = ( (float)(hr2 - hr4) / hr2 ) * 100.0f;