将十进制(双精度)值 < 0.001 转换为 Java 中的字符串
Converting Decimal (Double) Value < 0.001 to String in Java
我编写了一个用于大多数对象到字符串转换的小方法。
public String str(Object object) {
return object == null ? "" : object.toString();
}
将 double d = 0.0003
传递给此方法时,我得到 3.0E-4
的输出。所以我改变了这样的方法。
public String str(Object object) {
return object == null ? "" : object instanceof Double && (double) object < 0.001 ? String.format("%.10f", object)
: object.toString();
}
但我有点不好意思为每个转换检查 instanceof
,这是对非双对象的额外检查。这是我可以将 double 转换为精确字符串值的唯一方法,还是可以在没有额外检查实例的情况下正确转换。因为如果对象满足 instanceof Double
,转换是免费的,所以我不担心转换的性能。
我尝试了这些步骤,除 String.format
外,所有步骤均产生 E
输出
double d = 0.0003; // 3.0E-4
System.out.println(String.valueOf(d)); // 3.0E-4
System.out.println(Double.toString(d)); // 3.0E-4
System.out.println(String.format("%.10f", d)); // 0.0003000000
您可以为不同的类型提供不同的功能,例如:
public static String str(final Object object) {
return object == null ? "" : object.toString();
}
public static String str(final Double d) {
return d == null ? "" : str(d.doubleValue());
}
public static String str(final double d) {
return d < 0.001 ? String.format("%.10f", d) : String.valueOf(d);
}
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class PrintNumbers {
public static void main(String[] args) {
printNumberWOScientificNotations(0.1);
printNumberWOScientificNotations(0.001);
printNumberWOScientificNotations(0.00001);
System.out.println(0.00001);
}
static void printNumberWOScientificNotations(Object number) {
// Check if in scientific notation
if (String.valueOf(number).toLowerCase().contains("e")) {
System.out.println("Converting from e to number with 25 maximum fraction digits.");
NumberFormat formatter = new DecimalFormat();
formatter.setMaximumFractionDigits(25);
System.out.println(formatter.format(new Double(number.toString())));
} else {
System.out.println(String.valueOf(number));
}
}
}
您可以使用 String.valueOf()
:
public static void main(String[] args) {
final List<String> doubleValues = new ArrayList<>();
double value = 0.0;
doubleValues.add("5.01");
doubleValues.add("0.002");
doubleValues.add("0.00024");
doubleValues.add("0.000022");
for (String elem : doubleValues) {
value += Double.valueOf(elem);
}
System.out.printf("%.10f", value); // Formatting in print
System.out.println();
System.out.println(String.format("%.10f", value)); // Print with String formatting
double v = Double.parseDouble(String.valueOf(value)); //convert decimal number to double for print or calc
System.out.println(v);
}
我编写了一个用于大多数对象到字符串转换的小方法。
public String str(Object object) {
return object == null ? "" : object.toString();
}
将 double d = 0.0003
传递给此方法时,我得到 3.0E-4
的输出。所以我改变了这样的方法。
public String str(Object object) {
return object == null ? "" : object instanceof Double && (double) object < 0.001 ? String.format("%.10f", object)
: object.toString();
}
但我有点不好意思为每个转换检查 instanceof
,这是对非双对象的额外检查。这是我可以将 double 转换为精确字符串值的唯一方法,还是可以在没有额外检查实例的情况下正确转换。因为如果对象满足 instanceof Double
,转换是免费的,所以我不担心转换的性能。
我尝试了这些步骤,除 String.format
E
输出
double d = 0.0003; // 3.0E-4
System.out.println(String.valueOf(d)); // 3.0E-4
System.out.println(Double.toString(d)); // 3.0E-4
System.out.println(String.format("%.10f", d)); // 0.0003000000
您可以为不同的类型提供不同的功能,例如:
public static String str(final Object object) {
return object == null ? "" : object.toString();
}
public static String str(final Double d) {
return d == null ? "" : str(d.doubleValue());
}
public static String str(final double d) {
return d < 0.001 ? String.format("%.10f", d) : String.valueOf(d);
}
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class PrintNumbers {
public static void main(String[] args) {
printNumberWOScientificNotations(0.1);
printNumberWOScientificNotations(0.001);
printNumberWOScientificNotations(0.00001);
System.out.println(0.00001);
}
static void printNumberWOScientificNotations(Object number) {
// Check if in scientific notation
if (String.valueOf(number).toLowerCase().contains("e")) {
System.out.println("Converting from e to number with 25 maximum fraction digits.");
NumberFormat formatter = new DecimalFormat();
formatter.setMaximumFractionDigits(25);
System.out.println(formatter.format(new Double(number.toString())));
} else {
System.out.println(String.valueOf(number));
}
}
}
您可以使用 String.valueOf()
:
public static void main(String[] args) {
final List<String> doubleValues = new ArrayList<>();
double value = 0.0;
doubleValues.add("5.01");
doubleValues.add("0.002");
doubleValues.add("0.00024");
doubleValues.add("0.000022");
for (String elem : doubleValues) {
value += Double.valueOf(elem);
}
System.out.printf("%.10f", value); // Formatting in print
System.out.println();
System.out.println(String.format("%.10f", value)); // Print with String formatting
double v = Double.parseDouble(String.valueOf(value)); //convert decimal number to double for print or calc
System.out.println(v);
}