2013-03-15 49 views
1

我使用下面的代码来获得我创建到两个装饰位置的方法的答案。但是当我这样做和complile我得到一个错误,说标识符预期。 2错误出现在一个指向2和另一个之前。我的问题是什么?获得方法的答案到小数点后两位小数位

import java.text.NumberFormat; 

    NumberFormat nf = NumberFormat.getNumberInstance(); 
nf.setMaximumFractionDigits(2); 
+2

此代码是否在方法内?这个方法在类中吗? – 2013-03-15 16:49:05

+1

你已经显示的是正确的,假设这些行不在一起('import'语句必须在任何类之外)。 – 2013-03-15 16:49:25

+0

@HunterMcMillen我在方法之外声明它,但在里面使用它。在我的代码中没有主要东西。这可能是问题吗? – user2140783 2013-03-15 16:50:45

回答

0

你已经证明什么是正确的,假定线不是一起(import语句必须是任何类外)。因此,例如,这是有效的:

import java.text.NumberFormat; 

class MyClass { 

    void someMethod() { 
     NumberFormat nf = NumberFormat.getNumberInstance(); 
     nf.setMaximumFractionDigits(2); 
     // ... 
    } 
} 

...但这些行在一起,如您的问题所示不是。

如果不是这样,你说错误似乎集中在2。有时当我们在这里看到像这样的问题时,这是因为某些零宽度或类似空间的特殊字符偶然会在源代码中结束。因此,如果您删除该行并重新输入该行,则可能会清除违规字符。 (它实际上是令人惊讶多久,来了。)

+0

我试过这个 – user2140783 2013-03-15 16:58:38

+0

@ user2140783:不知道还有什么要告诉你的。如果我复制上面的代码并将其粘贴到一个'MyClass.java'文件中,它就可以很好地编译。所以你必须有潜在的东西潜藏在你没有看到的东西中(或无意中没有向我们展示)。 – 2013-03-15 17:00:20

-1

如下您可以编写一个通用功能:

public static double round(double inputNumber, int fractionDigits, int roundingMode) { 
     BigDecimal bigDecimal = new BigDecimal(inputNumber); 
     BigDecimal rounded = bigDecimal.setScale(fractionDigits, roundingMode); 
     return rounded.doubleValue(); 
} 

请看以下抽样检测结果:

import java.math.BigDecimal; 

public class RoundHelper { 


    public static void main(String[] args) { 
     System.out.println(RoundHelper.round(123.98980, 2, BigDecimal.ROUND_HALF_UP)); 
     System.out.println(RoundHelper.round(123.98000, 2, BigDecimal.ROUND_HALF_UP)); 
     System.out.println(RoundHelper.round(123.98000, 2, BigDecimal.ROUND_HALF_UP)); 
     System.out.println(RoundHelper.round(123.55087, 2, BigDecimal.ROUND_HALF_UP)); 
     System.out.println(RoundHelper.round(123.14000, 2, BigDecimal.ROUND_HALF_UP)); 
    } 

    public static double round(double inputNumber, int fractionDigits, int roundingMode) { 
     BigDecimal bigDecimal = new BigDecimal(inputNumber); 
     BigDecimal rounded = bigDecimal.setScale(fractionDigits, roundingMode); 
     return rounded.doubleValue(); 
    } 

} 

输出:

123.99 
123.98 
123.98 
123.55 
123.14 
+1

这不是OP询问的问题的答案,这就是完美有效的代码无法编译的原因。 (这个问题并不十分清楚。) – 2013-03-15 17:08:54

+0

它也行不通。对.01和.99之间的所有值测试结果%0.01,你会得到一个令人讨厌的震动。在90%以上的情况下,它是非零的,并且随着您提高精度而变得更糟。 – EJP 2013-03-16 00:05:07

相关问题