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

Cannot assign proper float values to class members in constructor

我的构造函数出现了奇怪的问题。我写了 class "Training" 代表一些测量参数。 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 - 为什么? 提前致谢!

您正在做整数除法。在进行除法之前尝试将整数转换为双精度数:

 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;

您正在做 int a/int b,然后将结果乘以 100.0f。 If b > a then a/b (integer division) returns 零。所以以后乘以 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 ; 

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

因此,如果除法结果不是整数,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;

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

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;