Runden auf 2 Nachkommastellen klappt nicht||| WARUM

Status
Nicht offen für weitere Antworten.

CentroN

Mitglied
Code:
import java.io.*;
import java.lang.*;
import java.math.*;
import java.text.*;

public class Election {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    	if (args.length != 6) {
    		System.out.println("Bitte geben Sie die Stimmen von 6 Parteien an!! Programm terminiert");
    		System.exit(1);
    	}
    	
    	String EingabeWert;
        int GesamtZahl = 0, x = 0, y = 0;
        int[] WerteArray = new int[6];
        double[] ProzeArray = new double[6];;
        // TODO code application logic here
        System.out.println("Eingabeauswertung hat begonnen");
        for (x = 0; x < WerteArray.length; x++) {
        	EingabeWert = args[x];
                    if (Kontrolle(EingabeWert) == false) {
                    	System.exit(1);
                    }
             WerteArray[x] = Integer.parseInt(args[x]);
             GesamtZahl += WerteArray[x];
        }
        
        for (x = 0; x < ProzeArray.length; x++) {
            //MakroAufruf
            ProzeArray[x] = roundEvenexp2((WerteArray[x] * 100.00 ) / GesamtZahl);
            //Debugzeile
            System.out.println(ProzeArray[x]);
        }            
    }
    
    //RoundMakro
     static double roundEvenExp2 (double d) {
   		return round (d, 2, HALF_EVEN, FormatType.exp);
    }
    
    /**
    * @param  d der zu rundende Gleitkommawert.
    * @param  scale die Anzahl der Nachkommastellen, falls type = fix,
    *         die Anzahl der tragenden Stellen - 1,  falls type = exp.
    *         scale sollte >= 0 sein (negative Werte werden auf 0 gesetzt).
    * @param  mode die Rundungsart: einer der Rundungsarten von BigDecimal,
    *         seit 1.5 in java.math.RoundingMode.
    * @param  type ein Element von "enum FormatType {fix, exp}" gibt an,
    *         auf welche Stellen sich die Rundung beziehen soll.
    *         FormatType.exp ('Exponential') steht für tragende Stellen,
    *         FormatType.fix ('Fixkomma') steht für Nachkommastellen.
    * @return der gerundete Gleitkommawert.
    * 

Anmerkung: Für die Werte <tt>double</tt> NaN und &Infinity
    * liefert round den Eingabewert unverändert zurück.
    */
     public static double round (double d, int scale, RoundingMode mode, FormatType type) {
        if (Double.isNaN(d) || Double.isInfinite(d)) return d;
        scale = Math.max(scale,0);  // Verhindert negative scale-Werte
        BigDecimal bd = BigDecimal.valueOf(d);
        if (type == FormatType.exp) {
            BigDecimal bc = new BigDecimal(bd.unscaledValue(),bd.precision()-1);
            return ((bc.setScale(scale, mode)).
            scaleByPowerOfTen(bc.scale()-bd.scale())).doubleValue();
        }
        return (bd.setScale(scale, mode)).doubleValue();
    }

 
    
    /**
     * Wenn die mitgelieferten Parameter nicht einer Zahl entsprechen,
     * dann endet das Programm normal durch try/ catch Anweisungsblöcke 
     */
    static boolean Kontrolle (String A) {
        int i;
        try 
        {
            i = Integer.parseInt(A);
            if (i >= 0) return true;
                else return false;
        }
        
        catch (Exception e) {
        	System.out.println("Wert " +A +" wurde nicht akzeptiert");
        	return false;
        }         
    }
}

Kann mir jemand sagen warum ich im Compiler immer nur cant´t find FormatType, rountEvenexp2 oder HALF_EVEN lesen muss und warum es nicht tut. Gibts kleinere Methoden zum runden auf 2 Nachkommastellen.
 
G

Gast

Gast
Versuche das hier
Code:
Math.round(doubleValue*100.0d)/100.0d
 

CentroN

Mitglied
Gast hat gesagt.:
Versuche das hier
Code:
Math.round(doubleValue*100.0d)/100.0d


Code:
   for (x = 0; x < ProzeArray.length; x++) {
            y = (WerteArray[x] * 100) / GesamtZahl;
            y = Math.round((y*100.d)/100.0d);
            ProzeArray[x] = y;
            //Debugzeile
            System.out.println(ProzeArray[x]);
        }

Hab jetzt den langen Klabimsel entfernt. So gibts auch einen Fehler weiß also nicht wie ich das einbauen soll da ich ja nicht schreiben kann GesamtZahl.0d oder so etwas ;o)


[/quote]
 

SnooP

Top Contributor
100.d? ... wenn 100.0d - aber bei 100.0 wird automatisch double genommen - das d kannte ich in der Verbindung mit Double bislang gar nisch... - also schreib einfach 100.0
 

CentroN

Mitglied
Election.java:49: possible loss of precision
found : long
required: int
y = Math.round((y*100.d)/100.0d);
^
1 error

Das ist die Meldung

Nun hab ich mir gedacht, dass man das vielleicht so hinbekommen kann aber leider nix

Code:
        for (x = 0; x < ProzeArray.length; x++) {
           
            ProzeArray[x] = (float)((int)((WerteArray[x] * 100) / GesamtZahl) * 100.0d)/(float)100.0d;
            //Debugzeile
            System.out.println(ProzeArray[x]);
        }
 

L-ectron-X

Gesperrter Benutzer
...das ist Unsinn.
Wenn du möchtest, dass die Zahl vom Typ float ist, kannst du das so festlegen:
Code:
float f = 100.0f;

Aber das ist natürlich noch nicht die Lösung zu deinem Problem.
 

CentroN

Mitglied
Code:
        for (x = 0; x < ProzeArray.length; x++) {
           
            ProzeArray[x] = (((WerteArray[x] * 100) / GesamtZahl) * 100.0f)/100.0f;
            //Debugzeile
            System.out.println(ProzeArray[x]);
        }

So sieht die Funktion aus und es sollen die Werte aus einem IntArray durch die komplizierte Berechnung ;o) als Float in ein Float Array und zwar genau mit 2 Nachkommastellen.[/quote]
 

L-ectron-X

Gesperrter Benutzer
Zahlen vom Typ int haben keine Stellen nach dem Komma, daher macht auch eine Rundung keinen Sinn. Du wirst bei einer Umwandlung in einen Typ double/float immer als Nachkommastelle eine 0 bekommen.
Aus einem int-Wert kannst du so ein float-Wert machen:
Code:
float f = Integer.valueOf(120).floatValue();
 
G

Guest

Gast
Code:
float nochNeGesamtzahl = (float)GesamtZahl;
und verwende nochNeGesamtzahl statt Gesamtzahl. ;)

So wie Du es hast, wird zuerst eine Ganzzahldivision durchgeführt,
bei der die Nachkommastellen nicht berücksichtigt werden.
 

CentroN

Mitglied
Code:
        for (x = 0; x < ProzeArray.length; x++) {
            System.out.println(WerteArray[x]);
            ProzeArray[x] = Math.round(((WerteArray[x] * 100.0f) / GesamtZahl) * 100.0f);
            System.out.println(ProzeArray[x]);
            ProzeArray[x] = ProzeArray[x]/100.0f;
            //Debugzeile
            System.out.println(ProzeArray[x]);
        }

So siehts jetzt aus und es klappt PRIMA
 

Sky

Top Contributor
Sag mal, ist es dein Ziel den Wert der Zahl zu ändern oder geht es nur darum die Zahl mit 2 Nachkommastellen anzuzeigen!? Wenn es nur um die Anzeige geht:
Code:
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(zahl));
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
Luk10 Nachkommastellen runden Java Basics - Anfänger-Themen 2
S Runden eines doubles auf n nachkommastellen Java Basics - Anfänger-Themen 10
T Runden mit Präzision vs. Runden mit Nachkommastellen Java Basics - Anfänger-Themen 4
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
J Runden auf 2 Nachkommastellen ? Java Basics - Anfänger-Themen 5
B Double je nach Nachkommastellen kfm runden Java Basics - Anfänger-Themen 7
G Durch Liste iterieren und nachkommastellen runden Java Basics - Anfänger-Themen 9
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
S Runden von Zahlen Java Basics - Anfänger-Themen 1
J Fehler beim Runden Java Basics - Anfänger-Themen 3
T ungewolltes Runden Java Basics - Anfänger-Themen 5
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
J Auf den nächsten Zehner runden? Java Basics - Anfänger-Themen 4
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
A Richtig runden Java Basics - Anfänger-Themen 9
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Zahlen runden Java Basics - Anfänger-Themen 5
E Runden Java Basics - Anfänger-Themen 2
U Erste Schritte Kommazahl runden Java Basics - Anfänger-Themen 17
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
H Zahl auf 2 nachkomma stellen runden Java Basics - Anfänger-Themen 13
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
I Runden / Zweikommastellen geht nicht... Java Basics - Anfänger-Themen 3
J Konvertieren und Runden von double in int Java Basics - Anfänger-Themen 3
H Datentypen Rechnen und Runden Java Basics - Anfänger-Themen 2
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
J Runden mit printf Java Basics - Anfänger-Themen 3
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
Rika Runden Java Basics - Anfänger-Themen 6
F Werte runden Java Basics - Anfänger-Themen 11
N Runden Java Basics - Anfänger-Themen 6
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
J richtig runden Java Basics - Anfänger-Themen 4
J Runden Java Basics - Anfänger-Themen 4
G divisions ergebnis runden Java Basics - Anfänger-Themen 3
P Runden auf eine Nachkommastelle Java Basics - Anfänger-Themen 18
S Wie runden man noch mal auf bestimmte stellen? Java Basics - Anfänger-Themen 8
S double runden Java Basics - Anfänger-Themen 5
W Runden Java Basics - Anfänger-Themen 10
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
R Zahl runden Java Basics - Anfänger-Themen 18
M Runden eines Doublewerts auf 13 Zeichen Java Basics - Anfänger-Themen 10
A Runden Java Basics - Anfänger-Themen 5
G Kein Runden Java Basics - Anfänger-Themen 3
R "Kaufmännisch runden" Java Basics - Anfänger-Themen 12
P Automatisch auf die nächst höere zahl runden? Java Basics - Anfänger-Themen 7
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
M runden Java Basics - Anfänger-Themen 9
D Einmal Runden ohne alles Java Basics - Anfänger-Themen 7
P Dezimalstellen limitieren (runden auf 2 Stellen) Java Basics - Anfänger-Themen 3
L Automatischen Runden oder Abschneiden? Java Basics - Anfänger-Themen 2
S Double runden funktioniert nicht immer ? Java Basics - Anfänger-Themen 2
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
A Bestimmt blöde Frage: Zahl runden Java Basics - Anfänger-Themen 10
K Fliesskommawert runden Java Basics - Anfänger-Themen 3
L Runden Java Basics - Anfänger-Themen 2
G Zahlen runden Java Basics - Anfänger-Themen 3
C double runden Java Basics - Anfänger-Themen 6
V Double runden Java Basics - Anfänger-Themen 6
D Zahlen runden Java Basics - Anfänger-Themen 10
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
C Runden einer Altersangabe Java Basics - Anfänger-Themen 5
P double Zahl runden Java Basics - Anfänger-Themen 2
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
F Nachkommastellen erzwingen Java Basics - Anfänger-Themen 2
P Nachkommastellen abschneiden Java Basics - Anfänger-Themen 7
E Nullen aus Nachkommastellen entfernen Java Basics - Anfänger-Themen 2
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
P Zahl genauer als 20 nachkommastellen Java Basics - Anfänger-Themen 4
R Auf Nachkommastellen prüfen. Java Basics - Anfänger-Themen 2
T long wird ohne Nachkommastellen ausgegeben Java Basics - Anfänger-Themen 5
M Datentypen Double = 0 / Double schneidet Nachkommastellen ab Java Basics - Anfänger-Themen 4
J Summe mit 45 nachkommastellen Java Basics - Anfänger-Themen 8
B Datentypen Float ohne .0 ausgeben, sonstige Nachkommastellen aber erhalten Java Basics - Anfänger-Themen 4
M Erste Schritte Nachkommastellen falsch bei Rechnung Java Basics - Anfänger-Themen 3
V Nachkommastellen begrenzen (1,xxx) Java Basics - Anfänger-Themen 3
G Datentypen Double ausgeben mit minimaler Anzahl Nachkommastellen Java Basics - Anfänger-Themen 3
M float/double Anzahl Nachkommastellen ermitteln Java Basics - Anfänger-Themen 18
L Double Zahlen und nachkommastellen Java Basics - Anfänger-Themen 5
J Nachkommastellen bei Zahlen Java Basics - Anfänger-Themen 20
M Nachkommastellen vergleichen + Array Hilfe Java Basics - Anfänger-Themen 6
D Ermitteln der Anzahl gleicher Nachkommastellen 2er Zahlen Java Basics - Anfänger-Themen 9
D Problem mit Nachkommastellen <%=Double.valueOf(35/1000)%> ergibt 0.0? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben