打印错误的小数

时间:2014-11-03 20:26:35

标签: java

arr[i]=s+t-Math.abs(s-j)/2;

这里是行s= 600 j = 631 t =60,答案应为645.5,但会打印645.0。 arr []是双

5 个答案:

答案 0 :(得分:4)

假设sj的类型为int,您必须执行Java的整数除法,这会产生ints-j生成-31,调用Math.abs overload that takes an int,并返回31。 Java中的整数除法意味着31/2 15int,而不是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;