2013-03-15 82 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