2017-07-28 7 views
0

Ich versuche, eine Benutzereingabe einer Dezimalzahl zu erhalten, und runde sie dann auf zwei Dezimalstellen ab. Dies ist der Code, den ich derzeit habe, der nicht richtig funktioniert, und ich bin mir nicht sicher warum.So runden Sie eine Benutzereingabe in Java ab

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

*** nicht richtig funktioniert *** was bedeutet das genau bedeuten ?? –

+0

Wenn ich ausgeführt werde, werde ich aufgefordert, eine Dezimalzahl einzugeben, und nachdem ich es eingegeben habe, passiert nichts anderes, und ich muss manuell beenden. – wcmisel

+1

Sie formatieren die Zeichenfolge, weisen sie jedoch keiner anderen Zeichenfolge zu. Zeichenfolgen sind in Java unveränderlich und können nicht wie eine Liste oder ein Array geändert werden, daher müssen Sie sie neu zuweisen: 'qwe1 = df.format (qwe1);' – 17slim

Antwort

3

Mit Scanner, eine bessere Nutzung nextLine(), wenn Sie es tun können, ist es von Fehlern bewahrt mit der return line char:

String qwe1 = qweInput.nextLine(); 

Dann müssen Sie double, zu analysieren, denn wenn es nicht aus zu werfen versucht Object zu double und stürzt

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

Dann kehrt das Verfahren den format st Ring formated, weil String unveränderlich sind, so müssen Sie es drucken direclty oder speichern:

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

Edit: Parsen zu vermeiden, verwenden Sie nextdouble kann Double() von Scanner, wie es wäre es direclty sparen als Doppel, aber das Format speichern Sie so einen anderen String benötigen würde, mit richtigen Namen;)

+0

Vielen Dank, es funktioniert jetzt. – wcmisel

+0

Du kannst die Antwort ja akzeptieren;) – azro

0

Statt

String qwe1 = qweInput.next();

versuchen

double qwe1 = qweInput.nextDouble();

By the way, qwe1 ist ein schrecklicher Name für eine Variable! Variablennamen sollten widerspiegeln, wofür sie sind.

0

würde ich vorschlagen, die Benutzereingabe als Doppel bekommen und dann wie folgt vorgehen:

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