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

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

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

我希望它像这样打印:12345678

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


当前回答

在我的生产代码中,当我使用它作为math.Eval()函数的字符串输入时,我遇到了同样的问题,该函数接受“x + 20 / 50”这样的字符串

我看了几百篇文章……最后我选择了这个,因为它的速度。因为Eval函数最终会将其转换回自己的数字格式,而math.Eval()不支持其他方法返回的尾随E-07,而且任何超过5 dp的内容对我的应用程序来说都太详细了。

这现在被用于有1000多个用户的应用程序的生产代码中……

double value = 0.0002111d;
String s = Double.toString(((int)(value * 100000.0d))/100000.0d); // Round to 5 dp

s display as:  0.00021

其他回答

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

我认为每个人的想法都是正确的,但并非所有的答案都是直截了当的。 我认为这是一段非常有用的代码。下面是一些可行的方法:

System.out.println(String.format("%.8f", EnterYourDoubleVariableHere));

”。“8”是您设置要显示的小数点后数位的位置。

我正在使用Eclipse,它工作没有问题。

希望这对你有帮助。我将感激任何反馈!

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

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

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

转换科学符号的好方法

String.valueOf (YourDoubleValue.longValue ())

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() )
    }