我想在Java中打印一个没有指数形式的双值。
double dexp = 12345678;
System.out.println("dexp: "+dexp);
它显示了这个E符号:1.2345678E7。
我希望它像这样打印:12345678
预防这种情况的最好方法是什么?
我想在Java中打印一个没有指数形式的双值。
double dexp = 12345678;
System.out.println("dexp: "+dexp);
它显示了这个E符号:1.2345678E7。
我希望它像这样打印:12345678
预防这种情况的最好方法是什么?
当前回答
我的解决方案: 字符串str =字符串。格式(“%。0 f”,yourDouble);
其他回答
我需要将一些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(等等)-没有任何小数点。
如果是小数,就只能得到两个小数。
使用字符串。格式(“%。0 f”,数量)
%。0f表示0小数
String numSring = String.format ("%.0f", firstNumber);
System.out.println(numString);
你可以使用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()格式在这里详细说明。
我认为每个人的想法都是正确的,但并非所有的答案都是直截了当的。 我认为这是一段非常有用的代码。下面是一些可行的方法:
System.out.println(String.format("%.8f", EnterYourDoubleVariableHere));
”。“8”是您设置要显示的小数点后数位的位置。
我正在使用Eclipse,它工作没有问题。
希望这对你有帮助。我将感激任何反馈!
对于用double表示的整数值,可以使用这段代码,它比其他解决方案快得多。
public static String doubleToString(final double d) {
// check for integer, also see https://stackoverflow.com/a/9898613/868941 and
// https://github.com/google/guava/blob/master/guava/src/com/google/common/math/DoubleMath.java
if (isMathematicalInteger(d)) {
return Long.toString((long)d);
} else {
// or use any of the solutions provided by others, this is the best
DecimalFormat df =
new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setMaximumFractionDigits(340); // 340 = DecimalFormat.DOUBLE_FRACTION_DIGITS
return df.format(d);
}
}
// Java 8+
public static boolean isMathematicalInteger(final double d) {
return StrictMath.rint(d) == d && Double.isFinite(d);
}