带有点分隔符的Java Double to String和小数点后的无限位数

时间:2014-03-26 15:55:36

标签: java

我想将java double值解析为字符串,但是使用点分隔符和小数点后的无限位数。我想要实现的目标:

33.123456789 -> "33.123456789"
1.234 -> "1.234"
2.0 -> "2"

我有我的示例代码,但它没有做到核心工作。

DecimalFormat DOUBLE_FORMAT = (DecimalFormat)NumberFormat.getNumberInstance(Locale.ENGLISH);
DOUBLE_FORMAT.applyPattern("#.####");

这给了我:

33.123456789 -> "33.1234"
1.234 -> "1.234"
2.0 -> "2"

所以我不想这样做。任何的想法 ? ;)

3 个答案:

答案 0 :(得分:2)

只需添加更多#,即

DOUBLE_FORMAT.applyPattern("#.######################");

答案 1 :(得分:2)

为什么不使用BigDecimal并将其传递给String.valueOf

double d = 123456789.0;
System.out.println(new BigDecimal(String.valueOf(d)).toPlainString());
double dd = 33.123456789;
System.out.println(new BigDecimal(String.valueOf(dd)).toPlainString());

<强>输出

123456789
33.123456789

答案 2 :(得分:2)

双打只是一个近似值,是2 -i 的总和。因此

33.123456789 * 100 != 3312.3456789

并且

double x = 33.123456789;
String s = String.valueOf(x);
// No guarantee that s has the same number of decimals.

对于精确的数字类型BigDecimal:

BigDecimal x = new BigDecimal(33.123456789); // Bad
BigDecimal x = new BigDecimal("33.123456789"); // Good, with correct precision.

因此,在您的情况下,必须考虑切换到BigDecimal。或接受String.valueOf / Double.toString

但是,

BigDecimal 具有无限的精确度。