2013-12-21 62 views
0

我正面临格式化双变量显示给用户的问题。该变量应该是一个双精度值,但在一些计算init之后,它会向包括E符号的用户显示。我如何从中删除E标志并只显示它是正常行为?格式化双变量

谢谢!

double formattedNumber = Double.parseDouble(new DecimalFormat("#############").format(myNum * calcal)); 
+2

你为什么要执行一个计算,然后将结果转换为一个字符串,然后将字符串解析为一个double? – CommonsWare

+0

我试图直接做myNum * calcal的总和,但它给了我一个错误。 –

+1

@MohamedHemdan那么,你接下来尝试的不是解决方案。 –

回答

2

有多种方法可以将double值转换为文本表示。最简单的方法是使用字符串格式。考虑下面的单元测试:

@Test 
public void test() { 
    System.out.format("%s%n", 1.12345e37); 

    System.out.format("%e%n", 1.12345e37); 
    System.out.format("%f%n", 1.12345e37); 
    System.out.format("%g%n", 1.12345e37); 

    System.out.format("%E%n", 1.12345e37); 
    System.out.format("%G%n", 1.12345e37); 
} 

在执行时将打印以下内容:

1.12345E37 
1.123450e+37 
11234500000000000000000000000000000000.000000 
1.12345e+37 
1.123450E+37 
1.12345E+37 

正如你所看到的,各种格式模式给出不同的结果。 %f变体给出了我​​所假设的答案。有关更多信息,请参阅String.formatFormat String Syntax

+0

非常感谢Dennis ...它和我一起工作,但是我的号码中出现了6位数字的零。我怎样才能删除它们? –

+0

你应该仔细阅读我的答案中的[Format String Syntax](http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax)链接,因为它是在那里详细解释。但是,使用'%.0f'而不是'%f'在小数点分隔符后不会给出任何数字(也可以去掉小数点分隔符)。 –