2017-02-23 78 views
1

我正在学习Java,并且学习了关于不同Java实用程序和数字格式的教程。但是,我的格式与本书中应该说的不一样。我的代码如下所示:DecimalFormat在Java中没有给出正确的输出

import java.text.NumberFormat; 
import java.text.DecimalFormat; 

public class Lessons { 

public static void main(String[] args) { 

    double d = 7.1348759272948202842847; 

    System.out.printf("%15e %n", d); 

    NumberFormat cashFormat = NumberFormat.getCurrencyInstance(); 

    System.out.println(cashFormat.format(d)); 

    double e = 14.9; 
    double f = 16.09805938020001; 
    double g = 12346; 

    DecimalFormat Dec_Format = new DecimalFormat("##0.##E0"); 

    System.out.println(Dec_Format.format(e)); 
    System.out.println(Dec_Format.format(f)); 
    System.out.println(Dec_Format.format(g)); 
} 

在书中例子,它说,12345格式化 “## 0 ## E0” 是 “12.3E3”。我收到的输出是“12.345E3”。

我收到的输出很有意义,但由于它与书不匹配,我不确定这是书中的错误还是错误。

这是正常的输出吗?

回答

0

您正在使用打印12.3E3的格式不正确这样反而:

DecimalFormat Dec_Format = new DecimalFormat("##0.##E0"); 

,你应该使用:

DecimalFormat Dec_Format = new DecimalFormat("##0.E0"); 

这将告诉你:

7,134876e+00 
7,13 € 
14,9E0 
16,1E0 
12,3E3//<----------------- 
+0

我懂了。我正确理解了现金格式化部分,但是由于本书显示的方式,科学记数法没有多大意义。如果我正确理解你的例子,Java的e标记将默认为一位小数,而不必指定,所以当我添加##时,它会在结尾添加两个数字(如果可用)。 (即## 0.E0 = 12.3,而## 0。## E0 = 12.345E3)这将比书中的措辞/格式更有意义。 – AdamWestPhD

+0

是吗?这是什么意思我的解决方案是错误的@AdamWestPhD :) –

+0

它看起来像它的作品:)感谢您的帮助 – AdamWestPhD