Java 有没有更好的方法将Double转换为it';精确的十进制字符串是多少?

Java 有没有更好的方法将Double转换为it';精确的十进制字符串是多少?,java,string,double,decimal,Java,String,Double,Decimal,我用String.format()和DecimalFormatter尝试了多种方法将Double转换为精确的十进制字符串,到目前为止我发现: String s = "-.0000000000000017763568394002505"; Double d = Double.parseDouble(s) * 100; System.out.println((new java.text.DecimalFormat("###########################.##############

我用String.format()和DecimalFormatter尝试了多种方法将Double转换为精确的十进制字符串,到目前为止我发现:

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

我并不真正喜欢我的解决方案,因为我觉得制作一个不涵盖所有情况的巨大模式很难看

你有别的办法吗?
我真的想要所有的小数,不带科学符号不带尾随的零

谢谢

附言:我需要这个没有外部库的Java 1.7版本。

试试下面的代码: 您也可以使用toString()方法,但它使用科学符号。


似乎你必须处理一些精确的问题。double不适用于此用途。更好地利用


新的BigDecimal(“0.1”)
新的BigDecimal(0.1)
之间有很大的区别。使用字符串构造函数可能会导致尾随零,并在解析字符串时失去舍入为双精度的效果。如果目标是打印double的精确值,则需要使用BigDecimal的double构造函数。用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());
  }
}

您是否尝试使用BigDecimal?如果您想要精确的十进制值,请不要使用float或double类型。阅读更多…可能重复的Nop!与中断浮点无关:这个问题是在从Double到String的转换过程中……很清楚,您是想像存储到Double后一样打印Double的完整精度,还是想将Double打印为输入的精确十进制表示形式?到目前为止,人们似乎认为你是在问后者,但我猜你是在问前者,两者的答案截然不同。谢谢,但这不起作用,因为我有两个尾随的零:
String s=“-.00000000000000 17763568394002505”;BigDecimal bd=新的BigDecimal;bd=bd.multiply(新的BigDecimal(100));System.out.println(bd.toPlainString())谢谢,但这不起作用,因为我得到了两个尾随的零:
字符串s=“-.00000000000000 17763568394002505”;BigDecimal bd=新的BigDecimal;bd=bd.multiply(新的BigDecimal(100));System.out.println(bd.toPlainString())返回:“-0.0000000000001776356839400250500”谢谢,但正如您在这里看到的,这不起作用:我得到“-0.000000177635683940025046778106689453125”,但我应该得到“-0.00000017763568394002505”…@pierreontenet它取决于您想要的是原始字符串还是双精度值。没有IEEE 754 64位二进制浮点,它的值是0×000000000000 17763568394002505。@ PielReNoNET如果精确的十进制值实际上是你想要的,考虑使用BigDeCimple而不是双,作为你的主要算术类型。谢谢!所以有一个链接指向“浮点数学坏了吗?”,但这是我想做的事情的副作用。
String value="13.23000";
BigDecimal bigD=new BigDecimal(value);
System.out.println(bigD);
System.out.println(bigD.stripTrailingZeros().toPlainString());
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());
  }
}