如果输入= 31.6227890 然后输出= 31.6227 但输出为31.6228
答案 0 :(得分:3)
您可以使用以下功能:
import java.text.DecimalFormat;
import java.math.RoundingMode;
public static double formatValue(Double number) {
DecimalFormat df = new DecimalFormat("####0.0000");
return Double.parseDouble(df.format(number));
}
修改: 您必须添加以下代码以进行四舍五入。
df.setRoundingMode(RoundingMode.DOWN);
输入= 31.6227890
输出= 31.6227
答案 1 :(得分:2)
如果要舍入,可以使用这样的截断。
double d = 31.6227890;
d = ((long) (d * 10000)) / 10000.0; // truncates down to 0
System.out.println(d);
打印
31.6227
注意:这可能会打印少于4位数字。如果您始终想要4,则需要使用格式。
d = 31.60007890;
d = ((long) (d * 10000)) / 10000.0; // truncates down to 0
System.out.println(d);
System.out.printf("%.4f%n", d);
打印
31.6
31.6000
注意:对于较大的值,您不会舍入它们,因为这会导致溢出。
private static final double WHOLE_NUMBER = 1L << 53;
public static double trunc4(double d) {
final double factor = 1e4;
return Math.abs(d) >= WHOLE_NUMBER / factor
? d
: ((long) (d * factor)) / factor;
}
出现错误的地方是数字太大,无论如何它们都是整数(由于双精度的限制)
注意:如果使用float
,则精度误差的极限是较小的值。
double d = 1024.00039999;
float f= (float) (long) (d * 10000) / 10000;
System.out.println(f);
打印
1024.0002
答案 2 :(得分:1)
您可以使用BigDecimal进行四舍五入:
new BigDecimal(31.6227890d).setScale(4, RoundingMode.DOWN)
返回所需的结果:31.6227
。
对于double
,您可以使用.doubleValue()
:
new BigDecimal(31.6227890d).setScale(4, RoundingMode.DOWN).doubleValue()
答案 3 :(得分:0)
float i =(float)((int)(31.6227890 * 10000))/ 10000;
System.out.println(i);
答案 4 :(得分:0)
您可以将其乘以1000,使用Math.floor()并将其除以1000
double a = 10.345665654;
double b = Math.floor(a * 10000) / 10000;
System.out.println(b);