在java中打印精确长度的double

时间:2016-11-18 10:24:47

标签: java format

我无法在网上找到我的问题的答案,这就是我在这里的原因。

我想在java中打印一个具有指定位数数字的数字:

Length = 10

1.123456789      ==> 1.123456789

123.123456789    ==> 123.1234567

123456.123456789 ==> 123456.1234

4 个答案:

答案 0 :(得分:2)

您似乎需要从数字的n表示中获取第一个String数字。但是,小数分隔符不应计为数字:

String printNumber(double number, int n) {
   String value = String.valueOf(number);
   String result = "";
   int count = 0;
   for (char c : value.toCharArray()) {
       if (count == n) break;
       if (c != '.') {
           count++;
       }
       result += c;
   }
   return result;
}

答案 1 :(得分:1)

你可以试试这个:

Double number = 1.123456789;
BigDecimal bigDecimal = new BigDecimal(number).setScale(6, RoundingMode.HALF_EVEN);
System.out.println("double value: " + bigDecimal.doubleValue());

setScale方法中,您可以选择点后的位数。

答案 2 :(得分:0)

那么,您可以根据非十进制数的长度来计算金额:

public String doubleToString(double in) {
    int length = (((int) in) + "").length(); //non-decimal length
    if (length <= 0 || length > 10) {
        //error out? not sure how you wish to handle 11-digit numbers
    }
    return String.format("%." + (10 - length) + "f", in); //format decimal
}

缩短:

//default to 0 decimals for >10 digits
public String doubleToString(double in) {
    return String.format("%." + Math.max(0, (10 - (((int) in) + "").length()) + "f", in);
}

答案 3 :(得分:0)

将数字保存为字符串并将子字符串从0到10.现在您可以将其解析回来并获得10位数字