Java不计算小数点
所以我试图对存储在整数数组中的整数进行数学运算Java不计算小数点,java,Java,所以我试图对存储在整数数组中的整数进行数学运算 float day1Hours = (day1[3]-day1[2]) / 2; 对于这个特定问题,第1天[3]=19,第1天[2]是10。所以,它应该是19-10=9,然后除以2得到4.5。但是,我得到的输出是4。我也尝试过将day1Hours存储为双倍,但没有任何区别。我怎样才能使它能够正确地进行数学运算并得到我需要的十进制值?问题是,您正在进行整数除法,然后转换为浮点值。试一试 float day1Hours = (day1[3]-
float day1Hours = (day1[3]-day1[2]) / 2;
对于这个特定问题,第1天[3]=19,第1天[2]是10。所以,它应该是19-10=9,然后除以2得到4.5。但是,我得到的输出是4。我也尝试过将day1Hours存储为双倍,但没有任何区别。我怎样才能使它能够正确地进行数学运算并得到我需要的十进制值?问题是,您正在进行整数除法,然后转换为
浮点值。试一试
float day1Hours = (day1[3]-day1[2]) / 2.0f;
在分母中使用float
literal将导致以浮点形式进行除法,并且不会得到整数截断。(作为使用浮点
文字的替代方法,您可以将分子或分母转换为浮点
,但这在我看来有点巴洛克风格。如果分子和分母都是int
变量,则更合适。)
仅仅更改day1Hours
的类型不会影响问题的原因是,首先使用声明的数据类型day1
对整个右侧进行评估,然后转换为赋值左侧的任何类型。问题是等式右侧的数字是整数,并且当除以2个整数小数位数被截断(整数除法向零舍入)4.5->4.0
float day1Hours = (float)(20-9) / 2; //5.5
尝试更改2->2f,这样2将被视为浮点而不是整数。更正:它将是19-10。抱歉,输入错误。day1[3]-day1[2]
的结果是int
2
是一个整数。当将一个整数除以另一个整数时,您永远无法得到带小数点的数字(双精度/浮点)。除以2.0
。Java在整数除法中截断十进制值。您需要将数组值存储为浮点数,或者将整数转换为浮点数。此外,如果需要精度,请使用BigDecimal。@TedHopp是对的,我的错。接近零。在我的回答中已修复请提供详细信息,而不是只提供代码答案-