我有一个整数值被传入,然后它被除以100,所以结果可能是int或double类型,不确定是否需要进行强制转换。
public void setWavelength(Integer value) {
this.wavelength = value;
}
然后将该值除以100
pluggable.setWavelength(entry.getPluggableInvWavelength()/100);
我不确定如何转换这个值/对象
int
)除以另一个整数(int
),结果仍然是一个整数(int
)。
-- 更多细节请参考:15.17 乘法运算符
你需要将其中一个或两个标记为双精度数(double
)。//cast the divisor entry.getPluggableInvWavelength() to double
pluggable.setWavelength( ((double) entry.getPluggableInvWavelength()) /100);
或者
//make the constant quotient a double
pluggable.setWavelength(entry.getPluggableInvWavelength() /100.0);
java.lang.Integer
是一个不可变的包装类型,而不是一个 int
!事实上,你不能对 java.lang.Integer
进行计算,但自从 Java 1.5 开始,编译器会自动进行 int
和 Integer
之间的转换(自动装箱和自动拆箱)。但一般来说,最好理解它们之间的区别,并仅在真正需要对象(而不是用于计算的数字)时使用 Integer
。waveLength
是double
类型,则有:entry.getPluggableWavelength() / 100d;
d
表示数字被视为 double
类型,因此除法结果也是 double
类型。
entry.getPluggableWavelength() / 100.0;
100.0将被视为double类型,结果也将是double类型。 - Liv如果你把一个int
除以另一个int
,你总会得到一个int
。如果你想要得到一个float
或者 double
(因为你需要表示结果的小数部分),那么你就需要将一个或两个输入进行转换:
int a = 3;
int b = 4;
int c1 = a / b; // Equals 0
double c2 = a / b; // Still equals 0
double c3 = (double)a / (double)b; // Equals 0.75
如果entry.getPluggableInvWavelength()返回一个int
,那么/100
的结果也将是一个int
。
如果你需要一个double类型的结果,那么你必须存储一个double类型的结果。
double wavelength;
public void setWavelength(double value) {
this.wavelength = value;
}
pluggable.setWavelength(entry.getPluggableInvWavelength()/100.0);
除以100.0就足以让你得到一个保留两位小数的双精度浮点数结果。
Integer
而不是int
有什么原因吗? - mre