arr[i]=s+t-Math.abs(s-j)/2;
这里是行s= 600 j = 631 t =60
,答案应为645.5
,但会打印645.0
。
arr []是双
答案 0 :(得分:4)
假设s
和j
的类型为int
,您必须执行Java的整数除法,这会产生int
。 s-j
生成-31
,调用Math.abs
overload that takes an int
,并返回31
。 Java中的整数除法意味着31/2
15
是int
,而不是15.5
double
。
使用浮点文字2.0
强制进行浮点除法(或将/
个操作数之一转换为double
):
arr[i]=s+t-Math.abs(s-j)/2.0;
答案 1 :(得分:1)
这是因为你在划分整数时会失去精确度。在分区周围投下一个角色
arr[i]= s+ t- (double) Math.abs(s-j)/2;
答案 2 :(得分:1)
尝试推杆。
arr[i]=s+t-Math.abs(s-j)/2.0;
这里的诀窍是,当你除以2时,它会给你一个整数答案。所以对于你的情况(Math.abs(-31)/ 2 - > 15 而不是 15.5 。因此会截断.5
因此,通过添加2.0,它将为您提供15.5的双重答案,并为您提供所需的解决方案
答案 3 :(得分:0)
可能s-j
是示例中的整数值(或长值)表达式,这使得Java选择整数/长值Math.abs(...)
调用,返回整数/长值。分割整数值时,小数位将被截断。例如,3 / 2
变为1,15 / 2
变为7。
使用浮点数学计算表达式的简单方法是将2.0
除以:
arr[i] = s + t - Math.abs(s-j) / 2.0;
这些其他写作风格也适用:
arr[i] = s + t - Math.abs(s-j) / 2.;
arr[i] = s + t - Math.abs(s-j) / 2f;
arr[i] = s + t - Math.abs(s-j) / 2d;
答案 4 :(得分:0)
你应该设置2f以进行小数除法(现在你在Math.abs(s-j)/ 2中进行整数除法)
那么你的代码应该是
arr[i] = s + t - Math.abs(s-j)/2f;