我有双重价值 -
double d = 1.67303521E8;
无论我以前用什么格式化它,我都无法得到实际的解决方案。
我试过了:
DecimalFormat df = new DecimalFormat("#.000");
和
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
但输出始终为1.67303521E8。 S0最后我用了
str.substring( 0,5 )
我想知道解决这个问题的实际解决方案是什么
答案 0 :(得分:1)
这样它应该按照你想要的方式格式化:
//This is just an object that can format numeric values into strings...
DecimalFormat df = new DecimalFormat("#.000");
//computation
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
double result = (double) tmp / factor;
//formatting to string of specified format
String formattedValue = df.format(result);
//optional...
System.out.println(formattedValue);
你的错误可能是 - 这是一个常见的错误 - 是你假设通过做某事,你可以神奇地改变双重值存储的格式 在记忆中。这不是真的。双打,日期等始终存储在原生结构中,您必须格式化它们才能以适当的指定格式呈现给人类。
然而,您在substring()方法中遇到了一个 blazing 错误:E
格式 - 也称为科学记数法 - 指定 E之后的指数,它指定值必须乘以10的指数10 ...在您的实现中重要信息丢失 ...
1.67303521E8
实际上是
167303521
而不是
1.673
答案 1 :(得分:1)
再试一次
System.out.println(new DecimalFormat("#.000").format(1.67303521E8));
输出
167303521.000