2017-07-28 32 views
0

我試圖得到一個小數的用戶輸入,然後將它舍入到兩個小數點。這是我目前擁有的代碼無法正常工作的代碼,我不知道爲什麼。如何四捨五入在Java中的用戶輸入

package code; 
import java.math.RoundingMode; 
import java.text.DecimalFormat; 
import java.util.Scanner; 
public class DecimalPlaces { 

    public static void main(String[] args) { 
     DecimalFormat df = new DecimalFormat("#.##"); 
     df.setRoundingMode(RoundingMode.CEILING); 
     Scanner qweInput = new Scanner(System.in); 
     System.out.println("Enter a decimal number:"); 
     String qwe1 = qweInput.next(); 
     df.format(qwe1); 
     System.out.println(qwe1); 
     } 

} 
+2

***工作不正常***是什麼恰恰意味着? –

+0

當我執行時,系統會提示輸入一個十進制數字,在我輸入它之後,沒有其他事情發生,我必須手動終止。 – wcmisel

+1

您對字符串進行格式化,但不要將其分配給任何內容。字符串在Java中是不可變的,不能像列表或數組那樣修改,所以你必須重新分配它:'qwe1 = df.format(qwe1);' – 17slim

回答

3

隨着掃描儀,更好地利用nextLine(),當你可以做到這一點,它從錯誤中保持與return line char

String qwe1 = qweInput.nextLine(); 

然後,你需要解析到double,因爲如果沒有它試圖從投Objectdouble和崩潰

df.format(Double.parseDouble(qwe1)); 

然後format方法返回第一環formated,因爲String是不可改變的,所以你需要將照片直接打印或保存:

qwe1 = df.format(Double.parseDouble(qwe1)); 
System.out.println(qwe1); 
//----------------------------------OR---------------------------------- 
System.out.println(df.format(Double.parseDouble(qwe1))); 

編輯:避免解析爲Double你可以從掃描儀使用nextDouble(),因爲這將照片直接保存作爲雙,但爲了節省你會需要另一個字符串如此,在適當的名稱格式;)

+0

非常感謝,現在正在工作。 – wcmisel

+0

您可以接受答案;) – azro

0

而不是

String qwe1 = qweInput.next();

嘗試

double qwe1 = qweInput.nextDouble();

順便說一句,qwe1是一個變量可怕的名字!變量名應該反映它們的用途。

0

我會建議讓用戶輸入爲double,然後做到這一點:

double roundNum = Math.round(num * 100.0)/100.0;