如何在Java中始终打印15个非零数字?

时间:2013-02-25 20:59:22

标签: java printf decimalformat

比如说我有Double值1.23456789123456。我希望能够将此数字乘以10的各种幂,并将输出显示为

  123.456789123456
12345.6789123456
    0.0123456789123456
    0.000123456789123456
etc

有没有办法在Java中执行此操作而不必使用if ... then语句来处理不同10的幂所需的更改小数精度?

3 个答案:

答案 0 :(得分:1)

如果您不需要将该数字作为实际浮点值,请尝试将该数字表示为String而不是小数点(例如"123456789123456")。然后使用String.substring()方法,您可以在任何地方打印小数点,包括前导零等。我不知道您可以完全避免使用任何if语句,但逻辑应该是相当简单。

例如,这会在三位有效数字后打印小数:

String n = "123456789123456";
System.out.print(n.substring(0, 3));
System.out.print('.');
System.out.print(n.substring(3));

答案 1 :(得分:1)

这可以改进,但它很接近:

public class Test {

    public static void main(final String[] args) {
        System.out.println(format(123.456789123456d));
        System.out.println(format(12345.6789123456d));
        System.out.println(format(0.0123456789123456d));
        System.out.println(format(0.000123456789123456d));
    }

    public static String format(final double d) {
        final int before = 16 - Integer.toString((int) d).length();
        final String format = "%" + (16 + before) + "." + before + "f";
        return String.format(format, d);
    }

输出:

        123.4567891234560
      12345.67891234560
          0.012345678912346
          0.000123456789123

答案 2 :(得分:0)

查看DecimalFormat课程