Java 在没有科学符号的字符串中格式化双精度

Java 在没有科学符号的字符串中格式化双精度,java,string,formatting,double,bigdecimal,Java,String,Formatting,Double,Bigdecimal,我有双人房双foo=123456789.1234。我想把foo变成一个字符串字符串str=foo+“”。但是现在foo等于“1.234567891234E8”。有没有办法把foo转换成一个没有科学符号的字符串? 我试过了 String str = String.format("%.0f", foo); String str = (new BigDecimal(foo))+""; 但这只是去掉了小数。它将str设置为“123456789”; 我试过了 S

我有双人房<代码>双foo=123456789.1234。我想把
foo
变成一个字符串<代码>字符串str=foo+“”。但是现在
foo
等于“1.234567891234E8”。有没有办法把
foo
转换成一个没有科学符号的字符串? 我试过了

String str = String.format("%.0f", foo);
String str = (new BigDecimal(foo))+"";
但这只是去掉了小数。它将
str
设置为“123456789”; 我试过了

String str = String.format("%.0f", foo);
String str = (new BigDecimal(foo))+"";

但这失去了准确性。它将
str
设置为“123456789.1234000027179718017578125”

只使用
%f
而不是
%.0f

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        double foo = 123456789.1234;
        String str = String.format("%f", foo);
        System.out.println(str);

        // If you want to get rid of the trailing zeros
        str = new BigDecimal(str).stripTrailingZeros().toString();
        System.out.println(str);
    }
}
输出:

123456789.123400
123456789.1234

仅供参考,
BigDecimal
方法不会失去准确性——它准确地描述了存储在该
double
中用于删除尾随零的实际值。使用大小数是我应该关心的性能下降吗?不…我不知道…它从Java-5(今天我们有Java-15)开始就存在,我从来没有听说/读过它会导致性能下降…但是,如果有任何疑问,您可以随时进行基准测试。