double-Wert aus einzelnen Ziffern erzeugen

Hallo zusammen,

ich hab ein etwas exotisches Problem. In meiner Applikation kann der Anwender einen Zählerstand (wie an einem Stromzähler - siehe Screenshot) eingeben bzw. werden die einzelnen Stellen des Zählerstandes mittels Grafiken abgebildet. Somit klickt er an der jeweiligen Stelle die Grafik an und kann somit den nummerischen Wert ändern.

http://www.ip-symcon.de/forum/attachments/f52/8015d1272437369-zahlen-bildern-stromzaehler_1.jpg

Diesen Wert merke ich mir in einer Arraylist vom Typ Integer. Die Vor- und Nachkommastellen sind mir bekannt. Jetzt muss ich allerdings (bereits währrend der Eingabe des Anwenders) aus den Werten in der Arraylist den tatsächlichen Zählerstand berechnen bzw. ich muss mir einen double-Wert bilden.

Beispiel:

Wenn der Zähler 4 Vorkomma und 2 Nachkomma Stellen hat, zeichne ich logischerweisse 6 Bilder.
Jetzt beginnt der Anwender mit der Eingabe. Er ändert die letzte Nachkommastelle bzw. tippt er eine 8 ein:

Somit steht in meiner Arraylist:

array[0] = 0
array[1] = 0
array[2] = 0
array[3] = 0
array[4] = 0
array[5] = 8

Ändert er jetzt noch die erste Stelle bzw. tippt er eine 5.:

array[0] = 5
array[1] = 0
array[2] = 0
array[3] = 0
array[4] = 0
array[5] = 8

usw.

Nach jeder Eingabe lande ich in meiner Schleife mit der Arraylist und den Infos über die Dezimalstellen...bisher tue ich mich extrem schwer jetzt daraus einen gültigen double Wert zu erzeugen bzw. diesen zu durchlaufen.

Habt Ihr eine Idee....jeder Tipp hilft!

Danke im Voraus!
 
Zuletzt bearbeitet von einem Moderator:

Camill

Bekanntes Mitglied
Habe ich es richtig verstanden - die sechs Werte aus dem Array sollen zu einem Double Wert "zusammengefasst" werden?
 
Zuletzt bearbeitet:

TKausL

Top Contributor
Java:
array[0] = 0;
array[1] = 0;
array[2] = 0;
array[3] = 0;
array[4] = 0;
array[5] = 8;
double stand = 0;

for(int i = 0; i < 6; i++){
    stand += array[i]*Math.pow(10, 3-i);
}
Müsste eigentlich stimmen...

Edit: Getestet, stimmt.
Oder du baust dir einen String zusammen und Castest den.
 
Zuletzt bearbeitet:
Servus,

vielen Dank. Der Wert wird über die Potenzierung korrekt ermittelt - und das in einem Einzeiler...da hätte ich mir wieder einen abgewürgt. Allerdings habe ich Probleme mit der Nachkommastelle bzw. sollte ich diese ja quasi dynamisch verschieben können - die Information über die Anzahl an Nachkommastellen übergebe ich meiner Berechnungs-Methode.
In der beliebig großen Arraylist ist ja immer der komplette Zählerstand erhalten.

Code:
public double calculateReadingValue(ArrayList<Integer> _numbers, int numDecimals) {
		double counter = 0;
		for(int i = 0; i < _numbers.size(); i++) {
			counter += _numbers.get(i) * Math.pow(10, 3-i);
		}
		return counter;
	}

Beispiel: der Anwender gibt einen Zählerstand von 9999999,99 (9 Stellen) ein.
Somit steht in meiner List:

array[0] = 9;
array[1] = 9;
array[2] = 9;
array[3] = 9;
array[4] = 9;
array[5] = 9;
array[6] = 9;
array[7] = 9;
array[8] = 9;

als Ergebnis erhalte ich jetzt 9999,99999 - was ja auch rein rechnerisch stimmt. Allerdings eben nicht mehr zu meinem Zählerstand passt.

Das müsste ich doch noch irgendwie eleganter lösen können, oder?

Grüße
 

TKausL

Top Contributor
Ersetze
Java:
Math.pow(10, 3-i);

Durch

Java:
Math.pow(10, array.length-(i+nachkommastellen+1));

ungetestet.
 
S

SlaterB

Gast
offensichtlich hängt Math.pow(10, 3-i) mit der Interpretation zusammen,
hast du überhaupt nicht überlegt, warum da 3 steht? 3 hatte im Beispiel von TKausL mit der Anzahl der Nachkommastellen zu tun,
nicht direkt, denn es waren ja nur 2, teste was dort eingetragen werden muss, was bei anderen Werten passiert,
inwiefern du letzlich deine Variable einbauen kannst/ musst,

ein Kopf ist zum Denken da, nie vergessen, nicht nur zum Postings schreiben ;)
(edit: ok, Denken wieder einstellen)
 

Andi_CH

Top Contributor
Das müsste ich doch noch irgendwie eleganter lösen können, oder?

Ja :D

Java:
	static double intArrToDouble(int[] intArr) {
		double result = 0;
		for(int i = 0; i < intArr.length; i++) {
			result = result * 10 + intArr[i];
		}
		result /= 100;
		return result;
	}

Die Ziffer 3 im vorhergehenden Code ist schlecht, denn so ist der Code nicht wiederverwendbar.
Lieber allgemein formulieren - das heisst für beliebige Array-Längen.

In meinem Code steht noch 100 drin. Auch das ist auch suboptimal.
Da lohnt es sich darüber nachzudenken, ob auch der Faktor (die Position an der der "." steht) als Paramter übergeben, im Klassenkopf als Konstante deklariert werden soll oder ob es ok ist so.
(Das ist einerseits Geeschmackssacke, andererseits auch Projektabhängig)
 
Zuletzt bearbeitet:
so...lieber spät als nie - musste die Programmierung wieder ein paar Tage auf Eis legen.

Vielen Dank für die Hilfestellungen - hat einwandfrei funktioniert inkl. Lernfaktor:

Code:
         /*
         * Liefert den Zählerstand abhängig vom gesetzten Wert (Tag-Object) in der ImageView
         * array[0] = 9; <br>
	 * array[1] = 9; <br>
	 * array[2] = 9; <br>
	 * array[3] = 9; <br>
	 * array[4] = 9; <br>
	 * array[5] = 9; <br>
         * Beispiel: 2 Nachkommastellen = 9999,99 <br>
	 * 1 exponent = 3  (6 - 3)  ->  (9 * Math.pow(10, 3))  = 9000 (value+=9000) <br>
	 * 2 exponent = 2  (6 - 4)  ->  (9 * Math.pow(10, 2))  = 900  (value+=9900) <br>
	 * 3 exponent = 1  (6 - 5)  ->  (9 * Math.pow(10, 1))  = 90   (value+=9990) <br>
	 * 4 exponent = 0  (6 - 6)  ->  (9 * Math.pow(10, 3))  = 9 	  (value+=9999) <br>
	 * 5 exponent = -1 (6 - 7)  ->  (9 * Math.pow(10, -1)) = 0,9  (value+=9999,9) <br>
	 * 6 exponent = -2 (6 - 8)  ->  (9 * Math.pow(10, -2)) = 0,09 (value+=9999,99) <br>
	 *<br>
        */
public double getValueDependOnImageViews(ArrayList<ImageView> _imageViews, int numDecimals) 
{
		double value = 0;
		for(int i = 0; i < _imageViews.size(); i++) {
	                int exponent = _imageViews.size() - (i + numDecimals + 1);
			int tagValue = Integer.valueOf((String) _imageViews.get(i).getTag()); 
			value += (tagValue * Math.pow(10, exponent));
		}
		return value;
	}

Jetzt kann ich quasi aus den Bildinformationen den Wert ermitteln. Allerdings muss das auch aus der anderen Richtung funktionieren bzw. aus dem Wert die einzelnen Bildpositionen setzen:

Code:
         /*
         * Setzt die Bilder (inkl. Tag) in Relation zum eingegeben Zählerstand
         */
public ArrayList<ImageView> getImageViewsDependOnValue
					(ArrayList<ImageView> _imageViews, double _value, int _numDecimals) {
	for (int i = 0; i < _imageViews.size(); i++) {
		int exponent = _imageViews.size() - (i + _numDecimals + 1);
		double digit = _value / Math.pow(10, exponent);
		int lastDigit = (int) Math.round(Math.floor(digit));
						
		_imageViews.get(i).setTag(lastDigit);
	        _imageViews.get(i).setImageDrawable(getDrawableDependOnTag(lastDigit));
		_value -= (lastDigit * Math.pow(10, exponent));
		}
		return _imageViews;
	}

Sollte passen....Verbesserungsvorschläge sind immer willkommen

Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
A Erste Schritte Double Wert aus String zu int Java Basics - Anfänger-Themen 2
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9
H if-Abfrage double wert Java Basics - Anfänger-Themen 5
Q Kommastellen hinter double wert entfernen Java Basics - Anfänger-Themen 5
J Double Wert = 0.0 Java Basics - Anfänger-Themen 4
P Einem Double-Objekt einen float-Wert zuweisen Java Basics - Anfänger-Themen 2
K Double Wert erzeugen Java Basics - Anfänger-Themen 4
H Double Wert Java Basics - Anfänger-Themen 6
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
M int-Wert in double-Wert umwandeln Java Basics - Anfänger-Themen 11
J double wert aus textfeld auslesen Java Basics - Anfänger-Themen 2
L Double Wert ausgeben Java Basics - Anfänger-Themen 6
M Double-Wert in Byte[] umwandeln Java Basics - Anfänger-Themen 7
D int wert einlesen double ausgeben probleme Java Basics - Anfänger-Themen 10
G bei double nur Wert vor Punkt ausgeben Java Basics - Anfänger-Themen 6
N Problem mit Double Wert Java Basics - Anfänger-Themen 2
S Einen double-Wert formatieren auf Nachkommastellen Java Basics - Anfänger-Themen 3
B double -> Wert = infinity Java Basics - Anfänger-Themen 5
G wenn double = 0, den wert "null" in die datenbank Java Basics - Anfänger-Themen 3
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
I double-Wert formatiert ausgeben / Vector sortieren Java Basics - Anfänger-Themen 4
W Double or Float zusammenrechnen Java Basics - Anfänger-Themen 15
I Review von euch erwünscht, double Rechnung falsch Java Basics - Anfänger-Themen 34
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
krgewb Double mit zwei Nachkommastellen Java Basics - Anfänger-Themen 2
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
F java: incompatible types: possible lossy conversion from double to int Java Basics - Anfänger-Themen 1
J Double Variable und Addition Java Basics - Anfänger-Themen 2
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
Kotelettklopfer Variablen Double zwingen Ganzzahlen mit 2 Nachkommastellen auszugeben Java Basics - Anfänger-Themen 10
A possible lossy conversion from double to int Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
V Erste Schritte Die Nuller bei double NICHT abschneiden Java Basics - Anfänger-Themen 4
Y Datentypen Double Division ungenau Java Basics - Anfänger-Themen 45
L Datentypen Rechnen und abrunden mit double Java Basics - Anfänger-Themen 7
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
D Methode mit Übergabe double und Rückgabe String Java Basics - Anfänger-Themen 2
P Hilfe bei Double Java Basics - Anfänger-Themen 1
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
M Konvertierung String -> double Java Basics - Anfänger-Themen 8
A Double Scan eingrenzen Java Basics - Anfänger-Themen 2
O Erste Schritte Potenzmethode per double Java Basics - Anfänger-Themen 11
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
H Double oder nicht? Java Basics - Anfänger-Themen 7
J int array als double array ausgeben Java Basics - Anfänger-Themen 9
M Int und Double in Array speichern Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
B Hashing (verkettet/double) Java Basics - Anfänger-Themen 0
L Konvertieren von String zu double?! Java Basics - Anfänger-Themen 6
V Operatoren Warum kommt bei double bei den Nachkommastellen irgendwann eine 2?! (1.20000000000002) Java Basics - Anfänger-Themen 5
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
I Double.ParseDouble 2 Textfelder Java Basics - Anfänger-Themen 1
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
V Variablen Double später deklarieren Java Basics - Anfänger-Themen 7
V double = 1.34823e-300 Java Basics - Anfänger-Themen 5
W double*double error Java Basics - Anfänger-Themen 4
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
J [Rundungsfehler bei Double] Grundkurs Java: Checke Lösungsweg nicht Java Basics - Anfänger-Themen 1
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
T set Metode für Double Java Basics - Anfänger-Themen 6
Hijo2006 String to Double Java Basics - Anfänger-Themen 4
A Kommafehler beim double einleseen korrigieren Java Basics - Anfänger-Themen 2
K Operatoren The Operator * is undefined for the argument type(s) double, String Java Basics - Anfänger-Themen 4
das_leon String zu double konventieren Java Basics - Anfänger-Themen 1
K Genauer als Double? Java Basics - Anfänger-Themen 4
T Double.parseDouble(args[0]) Java Basics - Anfänger-Themen 13
A Java Ungenauigkeit double Java Basics - Anfänger-Themen 6
B Methoden The method mirror(double[]) in the type Convolution is not applicable for the arguments (double) Java Basics - Anfänger-Themen 8
C Typumwandlung von int<-->double Java Basics - Anfänger-Themen 6
S Regelabfragen aus Double-Array Java Basics - Anfänger-Themen 2
P Rückgabe erflogt nicht als Double Java Basics - Anfänger-Themen 2
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
T Java double berechnung fehler Java Basics - Anfänger-Themen 2
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
G double in float umwandeln Java Basics - Anfänger-Themen 2
F double[] an andere Methode übergeben Java Basics - Anfänger-Themen 1
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
S Datentypen double - kommastellen abschneiden Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben