如何在不使用BigDecimal的情况下在不四舍五入的情况下打印最多4个小数位的数字

时间:2018-07-19 06:41:39

标签: java

如果输入= 31.6227890 然后输出= 31.6227 但输出为31.6228

5 个答案:

答案 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);