无法为构造函数中的 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 ;
您对浮点值的计算使用整数值 hr1
、hr2
、hr3
和 hr4
。在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;
我的构造函数出现了奇怪的问题。我写了 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 ;
您对浮点值的计算使用整数值 hr1
、hr2
、hr3
和 hr4
。在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;