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

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

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

我希望它像这样打印:12345678

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


当前回答

这对我很有用。输出将是一个字符串。

String.format("%.12f", myvalue);

其他回答

Java防止E表示法出现双元:

五种将双精度数转换为正数的方法:

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class Runner {
    public static void main(String[] args) {
        double myvalue = 0.00000021d;

        //Option 1 Print bare double.
        System.out.println(myvalue);

        //Option2, use decimalFormat.
        DecimalFormat df = new DecimalFormat("#");
        df.setMaximumFractionDigits(8);
        System.out.println(df.format(myvalue));

        //Option 3, use printf.
        System.out.printf("%.9f", myvalue);
        System.out.println();

        //Option 4, convert toBigDecimal and ask for toPlainString().
        System.out.print(new BigDecimal(myvalue).toPlainString());
        System.out.println();

        //Option 5, String.format 
        System.out.println(String.format("%.12f", myvalue));
    }
}

这个程序输出:

2.1E-7
.00000021
0.000000210
0.000000210000000000000001085015324114868562332958390470594167709350585
0.000000210000

都是相同的值。

Protip:如果你对为什么这些随机数字出现在double值的某个阈值之外感到困惑,这个视频解释了:为什么0.1+0.2等于0.30000000000001?

http://youtube.com/watch?v=PZRI1IfStY0

你可以使用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()格式在这里详细说明。

这对我很有用。输出将是一个字符串。

String.format("%.12f", myvalue);

这可能是一个切线....但如果你需要把一个数值作为一个整数(太大而不能成为一个整数)放入一个序列化器(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

Java/Kotlin编译器将任何大于9999999(大于或等于1000万)的值转换为科学计数法。Epsilion符号。

示例:12345678被转换为1.2345678E7

使用此代码避免自动转换为科学计数法:

fun setTotalSalesValue(String total) {
        var valueWithoutEpsilon = total.toBigDecimal()
        /* Set the converted value to your android text view using setText() function */
        salesTextView.setText( valueWithoutEpsilon.toPlainString() )
    }