如果十进制值包含E作为一个项目,如何舍入/格式化十进制后的数字

时间:2013-10-03 16:24:39

标签: java decimal

我有双重价值 - 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 )

我想知道解决这个问题的实际解决方案是什么

2 个答案:

答案 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