Java 将双精度转换为字符串值,保留每个数字

Java 将双精度转换为字符串值,保留每个数字,java,string,type-conversion,Java,String,Type Conversion,如何将例如9.01236789E9的10位双精度值转换为字符串9012367890而不终止其任何数字 我尝试了9.01236789E9*Math.pow(10,9),但结果仍然是双“9.01236789E18”虽然10个数字应该可以保存,没有问题,但如果您对实际使用的数字感兴趣,您可能应该改为使用BigDecimal 如果您真的想在不使用科学记数法的情况下格式化一个double,您应该能够使用NumberFormat来实现这一点,或者(从Java 6开始)使用简单的字符串格式化API: impo

如何将例如9.01236789E9的10位双精度值转换为字符串9012367890而不终止其任何数字


我尝试了9.01236789E9*Math.pow(10,9),但结果仍然是双“9.01236789E18”

虽然10个数字应该可以保存,没有问题,但如果您对实际使用的数字感兴趣,您可能应该改为使用
BigDecimal

如果您真的想在不使用科学记数法的情况下格式化一个
double
,您应该能够使用
NumberFormat
来实现这一点,或者(从Java 6开始)使用简单的字符串格式化API:

import java.text.*;

public class Test
{
    public static void main(String[] args)
    {
        double value = 9.01236789E9;
        String text = String.format("%.0f", value);
        System.out.println(text); // 9012367890

        NumberFormat format = NumberFormat.getNumberInstance();
        format.setMaximumFractionDigits(0);
        format.setGroupingUsed(false);
        System.out.println(format.format(value)); // 9012367890
    }
}
尝试
String.format(“%20.0f”,9.01236789E9)

请注意,虽然它从来不是一个精确的值,但“保留每个数字”并没有真正意义。

您可以使用它

    double d = 9.01236789E9;    
    System.out.println(BigDecimal.valueOf(d).toPlainString());
String doubleString = Double.toString(inValue)

无效------>由您描述。要将double更改为字符串的位置。

在这种情况下,您也可以这样做

double value = 9.01236789E9;
System.out.println((long) value); // prints 9012367890

可能有人对被称为极客很反感。你可能想演一个长角色。请参阅以获取解释谢谢Jon。这是非常有用的。谢谢王子。这也很有用。谢谢彼得。后来我意识到,简单地说.longValue()也可以。如果先创建一个
Double
,那么.longValue()就可以了。使用强制转换不需要对象。