转换十进制(双精度)值<;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);
}