在Java中,如何将字符串转换为Double而不丢失精度?

在Java中,如何将字符串转换为Double而不丢失精度?,java,Java,如下所示 String d=new String("12.00"); Double dble =new Double(d.valueOf(d)); System.out.println(dble); 输出: 12.0 但我想得到12.00的精度 请告诉我在字符串类中不使用format()方法的正确方法,请使用而不是双精度: String d = "12.00"; // No need for `new String("12.00")` here BigDecimal decimal = new

如下所示

String d=new String("12.00");
Double dble =new Double(d.valueOf(d));
System.out.println(dble);
输出: 12.0

但我想得到12.00的精度

请告诉我在字符串类中不使用format()方法的正确方法,请使用而不是双精度:

String d = "12.00"; // No need for `new String("12.00")` here
BigDecimal decimal = new BigDecimal(d);

这是因为
BigDecimal
保持“精度”,而
BigDecimal(String)
构造函数从
右侧的位数设置,并在
toString
中使用它。因此,如果您只是使用
System.out.println(十进制)转储它
,它会打印出
12.00

您的问题不是精度的损失,而是您的数字及其小数位数的输出格式。你可以用它来解决你的问题

DecimalFormat formatter = new DecimalFormat("#0.00");
String d = new String("12.00");
Double dble = new Double(d.valueOf(d));
System.out.println(formatter.format(dble));
我还要补充一点,您可以使用它来选择要使用的小数分隔符。例如,一个要点:

DecimalFormatSymbols separator = new DecimalFormatSymbols();
separator.setDecimalSeparator('.');
然后,在声明您的
DecimalFormat
时:

DecimalFormat formatter = new DecimalFormat("#0.00", separator);

如果要格式化输出,请使用:

%.2f
-小数点后两位和
%n
-换行符

更新:
如果您不想使用
PrintStream#format(…)
,请使用。

您没有损失任何精度,12.0正好等于12.00。如果要显示或打印小数点后两位,请使用
java.text.DecimalFormat

双精度是一个数字。12.0和12.00是相同的数字。您可以使用
DecimalFormat
。您没有失去精度。这是完全相同的数字。你不必做
stringd=newstring(“12.00”),您只需执行
String d=“12.00”
@user:如果你想说“…而不使用
format()
…”之类的话,请解释为什么你不必这么做。否则就好比说“我需要拧下这个螺丝刀,不使用我这里的螺丝刀,最好的方法是什么?”所以不要使用
String#format
(OP说他/她不想使用),
DecimalFormat#format
。我在想,如果他/她不想要
String#format
,这不会有多大帮助。(我不知道他/她为什么要避免明显的工作工具…)我必须同意,我不知道他在不使用
String#format
的情况下用正确的方式表达什么意思。12.0可能代表11.95到12.04
System.out.format("%.2f%n", dble);