Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不计算小数点_Java - Fatal编程技术网

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是对的,我的错。接近零。在我的回答中已修复请提供详细信息,而不是只提供代码答案-