转换十进制(双精度)值<;0.001到Java中的字符串

转换十进制(双精度)值<;0.001到Java中的字符串,java,double,tostring,Java,Double,Tostring,我编写了一个小方法,用于大多数对象到字符串的转换 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 D

我编写了一个小方法,用于大多数对象到字符串的转换

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

您可以针对不同的类型提供不同的功能,例如:

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);
}
公共静态字符串str(最终对象){
返回对象==null?”:object.toString();
}
公共静态字符串str(最终双d){
返回d==null?”:str(d.doubleValue());
}
公共静态字符串str(最终双d){
返回d<0.001?String.format(“%.10f”,d):String.valueOf(d);
}

您可以为不同的类型提供不同的功能,例如:

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);
}
公共静态字符串str(最终对象){
返回对象==null?”:object.toString();
}
公共静态字符串str(最终双d){
返回d==null?”:str(d.doubleValue());
}
公共静态字符串str(最终双d){
返回d<0.001?String.format(“%.10f”,d):String.valueOf(d);
}

您可以使用
String.valueOf()

publicstaticvoidmain(字符串[]args){
最终列表doubleValues=新的ArrayList();
双值=0.0;
双重价值。添加(“5.01”);
双重价值。加上(“0.002”);
DoubleValue.加上(“0.00024”);
双重价值。加上(“0.000022”);
用于(字符串元素:双值){
值+=两倍。值(elem);
}
System.out.printf(“%.10f”,值);//打印格式
System.out.println();
System.out.println(String.format(“%.10f”,value));//使用字符串格式打印
double v=double.parseDouble(String.valueOf(value));//将十进制数转换为双精度进行打印或计算
系统输出打印Ln(v);
}

您可以使用
String.valueOf()

publicstaticvoidmain(字符串[]args){
最终列表doubleValues=新的ArrayList();
双值=0.0;
双重价值。添加(“5.01”);
双重价值。加上(“0.002”);
DoubleValue.加上(“0.00024”);
双重价值。加上(“0.000022”);
用于(字符串元素:双值){
值+=两倍。值(elem);
}
System.out.printf(“%.10f”,值);//打印格式
System.out.println();
System.out.println(String.format(“%.10f”,value));//使用字符串格式打印
double v=double.parseDouble(String.valueOf(value));//将十进制数转换为双精度进行打印或计算
系统输出打印Ln(v);
}

除非您的方法每秒被调用数千次,否则性能上的差异将不明显。甚至在那时也不可能。一般来说,除非出现性能问题,否则最好不要担心性能。为
null
返回“”是一个非常糟糕的主意。@EJP,在我的情况下,我必须为null值返回“”。除非每秒调用数千次您的方法,否则性能上的差异将是不明显的。甚至在那时也不可能。一般来说,除非出现性能问题,否则最好不要担心性能。为
null
返回“”是一个非常糟糕的主意。@EJP,在我的情况下,我必须为null值返回“”。这也会以错误的格式打印,因为双精度由用户首先强制转换到对象。该死。。!我已经将大多数方法编写为方法重载,但没有想到通过双参数重载。。!愚蠢的我D@AadityaGavandalkar你说得对,在这种情况下,instanceof是唯一的way@TheCoder如前所述,在这种情况下,这对您没有帮助。@AadityaGavandalkar,它会有帮助的。我只是为了尝试而将其重新分配给Object(在我的上一个代码中)。但真正的传递参数将是
Double
。删除了执行对象重新分配的行。无论如何,谢谢..这也会以错误的格式打印,因为double是由用户首先投射到对象的。该死。。!我已经将大多数方法编写为方法重载,但没有想到通过双参数重载。。!愚蠢的我D@AadityaGavandalkar你说得对,在这种情况下,instanceof是唯一的way@TheCoder如前所述,在这种情况下,这对您没有帮助。@AadityaGavandalkar,它会有帮助的。我只是为了尝试而将其重新分配给Object(在我的上一个代码中)。但真正的传递参数将是
Double
。删除了执行对象重新分配的行。无论如何,谢谢..也许把做这项工作的代码和它的测试用例分开.也许把做这项工作的代码和它的测试用例分开。
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));
        }
    }
}
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);
}