Java 打印错误的十进制数

Java 打印错误的十进制数,java,Java,这是一行,s=600 j=631 t=60,答案应该是645.5,但打印的是645.0。 arr[]是双精度的这是因为在分割整数时会丢失精度。请在该分割周围放置一个石膏 arr[i]=s+t-Math.abs(s-j)/2; 假设s和j的类型是int,则必须执行Java的整数除法,这将导致int。s-j将导致-31,并调用,然后返回31。Java中的整数除法意味着31/2是15的整数,而不是15.5的双精度 使用浮点文字2.0强制浮点除法或将/操作数之一转换为双精度: 试试推杆 arr[i]=

这是一行,s=600 j=631 t=60,答案应该是645.5,但打印的是645.0。
arr[]是双精度的

这是因为在分割整数时会丢失精度。请在该分割周围放置一个石膏

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

假设s和j的类型是int,则必须执行Java的整数除法,这将导致int。s-j将导致-31,并调用,然后返回31。Java中的整数除法意味着31/2是15的整数,而不是15.5的双精度

使用浮点文字2.0强制浮点除法或将/操作数之一转换为双精度:

试试推杆

arr[i]=s+t-Math.abss-j/2.0

这里的技巧是,当你除以2时,它会给你一个整数的答案。因此,对于您的案例,Math.abs-31/2->15而不是15.5。因此将截断0.5

因此,通过添加2.0,它将为您提供一个双答案,即15.5,并为您提供所需的解决方案

在您的示例中,s-j可能是一个整数值或长数值表达式,这使Java选择了一个整数值/长数值数学。abs。。。调用,返回整数值/长数值。除以整数值时,小数位数被截断。例如,3/2变为1,15/2变为7

使用浮点数学计算表达式的一种简单方法是除以2.0:

这些其他写作风格也适用:

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

您应该设置2f,以便进行十进制除法。现在您正在进行数学中的整数除法。abss-j/2

那么你的代码应该是

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;

是sj和t整数吗?我们需要查看所有变量的声明。是的,它们的类型是int^,正如他们所说的,您是如何声明变量的?如果它们是INT,那么就有意义了
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;
arr[i] = s + t - Math.abs(s-j)/2f;