有没有更好的方法将Double转换为精确的十进制字符串?

时间:2018-02-15 10:20:13

标签: java string double decimal

我尝试了很多方法将Double转换为带有String.format()和DecimalFormater的精确十进制字符串,到目前为止我找到了这个:

String s = "-.0000000000000017763568394002505";
Double d = Double.parseDouble(s) * 100;
System.out.println((new java.text.DecimalFormat("###########################.################################################################################")).format(d));

https://ideone.com/WG6zeC

我并不是我的解决方案的粉丝,因为制作一个不能涵盖所有案例的巨大模式对我来说很难看。

你还有另一种方法吗? 我真的希望 ALL 小数,没有科学记数法没有尾随零

由于

P.S。:我需要这个没有外部库和Java 1.7。

3 个答案:

答案 0 :(得分:4)

似乎你必须处理一些精确度。 double不适合此用途。更好地使用BigDecimal

String value="13.23000";
BigDecimal bigD=new BigDecimal(value);
System.out.println(bigD);
System.out.println(bigD.stripTrailingZeros().toPlainString());

答案 1 :(得分:1)

new BigDecimal("0.1")new BigDecimal(0.1)之间存在很大差异。使用String构造函数可能会导致尾随零,并且在解析字符串时会失去舍入为double的效果。如果目标是打印double的确切值,则需要使用BigDecimal的双构造函数。做任何算术都是double,而不是BigDecimal。

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    String s = "-.0000000000000017763568394002505";
    double d = Double.parseDouble(s) * 100;
    System.out.println(new BigDecimal(d).toPlainString());
  }
}

答案 2 :(得分:0)

试试这段代码: 您也可以使用toString()方法,但它使用科学记数法。 https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#toPlainString()

BigDecimal bd = new BigDecimal("-.0000000000000017763568394002505");
System.out.println(bd.toPlainString());