我想在Java中打印一个没有指数形式的双值。

double dexp = 12345678;
System.out.println("dexp: "+dexp);

它显示了这个E符号:1.2345678E7。

我希望它像这样打印:12345678

预防这种情况的最好方法是什么?


当前回答

这可能是一个切线....但如果你需要把一个数值作为一个整数(太大而不能成为一个整数)放入一个序列化器(JSON等),那么你可能需要“biginteger”

例子:

值为字符串- 7515904334

我们需要在Json消息中以数字形式表示它:

{
    "contact_phone":"800220-3333",
    "servicer_id":7515904334,
    "servicer_name":"SOME CORPORATION"
}

我们不能打印它,否则会得到这个:

{
    "contact_phone":"800220-3333",
    "servicer_id":"7515904334",
    "servicer_name":"SOME CORPORATION"
}

像这样向节点添加值会产生期望的结果:

BigInteger.valueOf(Long.parseLong(value, 10))

我不确定这是否真的切题,但由于这个问题是我在寻找解决方案时最热门的问题,我想我应该在这里分享一下,以造福于那些搜索不好的人。: D

其他回答

我的解决方案: 字符串str =字符串。格式(“%。0 f”,yourDouble);

你可以使用printf()与%f:

double dexp = 12345678;
System.out.printf("dexp: %f\n", dexp);

这将打印出dexp: 12345678.000000。如果你不想要小数部分,就用

System.out.printf("dexp: %.0f\n", dexp);

0在%。0f表示小数部分有0个位置,即没有小数部分。如果你想打印所需小数位数的小数部分,那么只需提供像%.8f这样的数字,而不是0。默认情况下,小数部分打印到小数点后6位。

这使用文档中解释的格式说明符语言。

在原始代码中使用的默认toString()格式在这里详细说明。

使用字符串。格式(“%。0 f”,数量)

%。0f表示0小数

String numSring = String.format ("%.0f", firstNumber);
System.out.println(numString);

我需要将一些double转换为货币值,发现大多数解决方案都是可以的,但不适合我。

十进制格式最终是我的方式,所以这是我所做的:

   public String foo(double value) //Got here 6.743240136E7 or something..
    {
        DecimalFormat formatter;

        if(value - (int)value > 0.0)
            formatter = new DecimalFormat("0.00"); // Here you can also deal with rounding if you wish..
        else
            formatter = new DecimalFormat("0");

        return formatter.format(value);
    }

正如你所看到的,如果数字是自然的,我得到-比如说- 20000000而不是2E7(等等)-没有任何小数点。

如果是小数,就只能得到两个小数。

只要你的号码是整数,这个方法就有效:

double dnexp = 12345678;
System.out.println("dexp: " + (long)dexp);

如果双精度变量在小数点后有精度,它将截断它。