我的构造函数出现了奇怪的问题。我写了类“训练”,它代表了一些测量参数。 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 - 为什么? 提前谢谢!
答案 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 > a
则a/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)
您对浮点值的计算使用整数值hr1
,hr2
,hr3
和hr4
。在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;