我想将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"
所以我不想这样做。任何的想法 ? ;)
答案 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 具有无限的精确度。