wie testet man eine zahl auf negativen wert?

  • 19 Antworten
  • Letztes Antwortdatum
M

Muha2

Neues Mitglied
0
Tag zusammen,
komme wieder mit nervigen fragen :D.. also...
diesmal wieder taschenrechner als beispiel.
habe einen knopf der die zahl im edittext negativ macht.
nun wenn ich mehrmals klicke dann bekomme ich auch "---1, --------1".
damit sowas nicht passiert habe mir folgendes ausgedacht.
-knopfdrück, test ob die zahl negativ ist, wenn ja return else blabla....

public void keypunkt (View view) {

String txtFuerEdit;

EditText fzahl2 = (EditText) findViewById(R.id.zahl2);
txtFuerEdit = fzahl2.getText() + ".";
if
.........
else
fzahl2.setText(txtFuerEdit);

}

kann bitte einer sagen oder vervollständigen?
2. das gleiche habe ich auch mit ".". wie wurde das gleiche heissen mit test auf dezimmalzahlen??? Vielen dank in voraus
 
Muha2 schrieb:
[...]
-knopfdrück, test ob die zahl negativ ist, wenn ja return else blabla....

[...]
2. das gleiche habe ich auch mit ".". wie wurde das gleiche heissen mit test auf dezimmalzahlen??? Vielen dank in voraus


Habe nicht alles genau verstanden, deswegen beziehe ich mich mal auf die zwei Punkte ;)

fzahl2.getText() gibt einen String aus.
Konvertiere den String in einen Integer, sodass du prüfen kannst, ob dieser Integer (oder Double, wenn du eben auch Dezimalzahlen magst) kleiner als Null ist.


Für deine zweite Frage hilft uns ein kleiner 'Algorithmus' Namens Modulo ;)

double d;
if (d % 1.0 > 0)
// d hat Nachkommastellen

Ich hoffe, ich konnte dir helfen.

Greets,
Max

Edit: > 0 ist Schwachsinn - mach ein != 0 draus ;) (Denn wenn d eine negative Dezimalzahl ist, wäre die if-Bedingung falsch, obwohl d Dezimalstellen hat ;) )
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Muha2
Wegen negativen zahlen hätte ich auch selber drauf kommen können -_-.
ich denke immer nur zu kompliziert.

wegen "Modulo" mache ich mich heut abend schlau

danke schön
 
Muha2 schrieb:
Wegen negativen zahlen hätte ich auch selber drauf kommen können -_-.
ich denke immer nur zu kompliziert.

wegen "Modulo" mache ich mich heut abend schlau

danke schön

Hihi, kann ja mal passieren.
Schlau machen ist immer gut - aber meine zwei Zeilen sind ja eigentlich schon fertig für die Implementierung ;)

Code:
Double d = Double.parseDouble(fzahl2.getText().toString());
if (d<0)
//Negativ
if (d % 1.0 != 0)
//Dezimalzahl
Eventuell kannst du das .toString() weglassen - weiß ich gerade nicht...

Greets,
Max
 
mit negativzahl habe ich verstanden

also wenn schon zb 3.76 oder -234,2 oder sonst irgend eine positive oder negative zahl eingegeben wurde muss ich nur wissen. damit ich vermeide das ich mehrmals komma eingebe muss ich wissen ob eine bruchzahl schon eingegeben wurde.
hoffe jetzt habe ich mich richtig ausgedrückt :(

Der ursprüngliche Beitrag von 19:20 Uhr wurde um 19:22 Uhr ergänzt:

ich teste einfach kurz :)
 
Ich bin ebenfalls verwirrt :D

Prüfen ob die Eingabe eine Dezimalzahl ist (z.B. 3,5) --> Modulo (siehe Oben)

Und warum willst du überhaupt Kommata einfügen?
Soll aus 7 7,00 werden oder wie?

Oder willst du verhindern, dass ein Nutzer aus Versehen zwei Kommata eingibt (z.B. 3,,5) und somit die App zum abstürzen bringt?! (-->if(mystring.contains(",,"))..)

Und testen klingt generell erstmal gut :thumbup:

Greets
 
Rein mathematisch testet man eine Zahl darauf, ob sie negativ oder positiv ist so:

positive Zahl heisst: Betrag (Zahl) = Zahl
negative Zahl heisst: Betrag (Zahl) ungleich Zahl

Wenn |a| = a , dann positiv
Wenn |a| not a, dann negativ

Vielleicht hilft das den Programmierern, in Excel geht es direkt so:

Wenn(Betrag(a)=a; "positiv";"negativ")
 
So klappt wunderbar. habe ich dann falsch verstanden.
ja das war gemeint mit mehrere kommas und mehrere punkte.

wenn wir schon bei thema double sind. mein ergebnis wird immer mit ,00 angezeigt.
also 3+7=10,00 kann man das eig irgendwie auslassen das er einfach 3+7=10 schreibt. aber zahlen mit komma soll er trotzdem ausrechnen können. also kein integer

Der ursprüngliche Beitrag von 19:35 Uhr wurde um 19:39 Uhr ergänzt:

Testpilot schrieb:
Rein mathematisch testet man eine Zahl darauf, ob sie negativ oder positiv ist so:

positive Zahl heisst: Betrag (Zahl) = Zahl
negative Zahl heisst: Betrag (Zahl) ungleich Zahl

Wenn |a| = a , dann positiv
Wenn |a| not a, dann negativ

Vielleicht hilft das den Programmierern, in Excel geht es direkt so:

Wenn(Betrag(a)=a; "positiv";"negativ")

habe früher mit autoit schöne dinge gezaubert. jetzt habe voll interesse an java und android. aber wie ich sehe etwas komplizierter. gibts den eine ausbildung in richtung java oder lernt man java nur während studium und weiterbildungen?
 
Testpilot schrieb:
Rein mathematisch testet man eine Zahl darauf, ob sie negativ oder positiv ist so:

positive Zahl heisst: Betrag (Zahl) = Zahl
negative Zahl heisst: Betrag (Zahl) ungleich Zahl

Wenn |a| = a , dann positiv
Wenn |a| not a, dann negativ

Vielleicht hilft das den Programmierern, in Excel geht es direkt so:

Wenn(Betrag(a)=a; "positiv";"negativ")
Betrag wird in Java durch die Klassenmethode abs() repräsentiert :)
Math.abs(zahl) entspricht |zahl|

Muha2 schrieb:
So klappt wunderbar. habe ich dann falsch verstanden.
ja das war gemeint mit mehrere kommas und mehrere punkte.

wenn wir schon bei thema double sind. mein ergebnis wird immer mit ,00 angezeigt.
also 3+7=10,00 kann man das eig irgendwie auslassen das er einfach 3+7=10 schreibt. aber zahlen mit komma soll er trotzdem ausrechnen also kein integer
Freut mich :thumbup:

Bin mir nicht sicher, aber probiere mal:
Math.round(zahl*1/1d);

Oder if (Integer.parseInteger(zahl) == zahl)
Integer.parseInteger(zahl) //--> aus 7,00 sollte 7 werden

Oder noch ne Idee (^^):
if (d % 1.0 == 0)
String erg = String.valueOf(d).replaceAll(",00","");
//Das Prüft erst, ob es ein *,00 ist und wenn ja, dann ersetzt er die 3 Nachkommastellen mit... nun ja.. nichts^^

Greets
 
Zuletzt bearbeitet:
myeta schrieb:
Bin mir nicht sicher, aber probiere mal:
Math.round(zahl*1/1d);

Oder if (Integer.parseInteger(zahl) == zahl)
Integer.parseInteger(zahl) //--> aus 7,00 sollte 7 werden

Oder noch ne Idee (^^):
if (d % 1.0 == 0)
String erg = String.valueOf(d).replaceAll(",00","");
//Das Prüft erst, ob es ein *,00 ist und wenn ja, dann ersetzt er die 3 Nachkommastellen mit... nun ja.. nichts^^

Greets


hmm peinlich :o aber ich checke irgendwie nicht wo ich das jetzt einfüge :blink:.
bitte um aufklärung. hier ist mein = knopf


public void ButtonKlick (View view) {
double zahl1;
double zahl2;
TextView Feldzahl1 = (TextView) findViewById (R.id.zahl1);
EditText Feldzahl2 = (EditText) findViewById(R.id.zahl2);
if (Feldzahl1.getText().toString().length() == 0) {
return;
}
if (Feldzahl2.getText().toString().length() == 0) {
return;
}
zahl1 = Double.parseDouble(Feldzahl1.getText().toString());
zahl2 = Double.parseDouble(Feldzahl2.getText().toString());
if (sRechenmodus.equals("+")){
zahl2 = zahl1 + zahl2;

}
if (sRechenmodus.equals("-")){
zahl2 = zahl1 - zahl2;

}
if (sRechenmodus.equals("*")){
zahl2 = zahl1 * zahl2;

}
if (sRechenmodus.equals("/")){
zahl2 = zahl1 / zahl2;

}
Feldzahl2.setText(String.valueOf(zahl2));
}
 
public void ButtonKlick (View view) {
double zahl1;
double zahl2;
TextView Feldzahl1 = (TextView) findViewById (R.id.zahl1);
EditText Feldzahl2 = (EditText) findViewById(R.id.zahl2);
if (Feldzahl1.getText().toString().length() == 0) {
return;
}
if (Feldzahl2.getText().toString().length() == 0) {
return;
}
zahl1 = Double.parseDouble(Feldzahl1.getText().toString());
zahl2 = Double.parseDouble(Feldzahl2.getText().toString());

if (zahl % 1.0 == 0){
Math.round(zahl1*1/1d);
}
if (zahl2 % 1.0 == 0){
Math.round(zahl2*1/1d);
}



if (sRechenmodus.equals("+")){
zahl2 = zahl1 + zahl2;

}
if (sRechenmodus.equals("-")){
zahl2 = zahl1 - zahl2;

}
if (sRechenmodus.equals("*")){
zahl2 = zahl1 * zahl2;

}
if (sRechenmodus.equals("/")){
zahl2 = zahl1 / zahl2;

}
Feldzahl2.setText(String.valueOf(zahl2));
}


Ich weiß aber nicht, ob durch das Round auch wirklich aus 7,00 7 wird ;)
Eventuell selbst bissl Googlen.

Greets
 
  • Danke
Reaktionen: Muha2
leider passiert nix :(.
trotzdem danke werde später mal googln.
 
Muha2 schrieb:
leider passiert nix :(.
trotzdem danke werde später mal googln.

Hrhr natürlich nicht - mein Fehler:
Wenn überhaupt dann so:

Code:
if (zahl1 % 1.0 == 0){
zahl1 = Math.round(zahl1*1/1d);
}
if (zahl2 % 1.0 == 0){
zahl2 = Math.round(zahl2*1/1d);
}

Greets
 
Wieso schaust du nicht einfach, ob in dem String bereits ein "." (bzw. je nach Lokalisierung "," - das bekommst du sicher auch irgendwie raus, welches Zeichen dafür verwendet wird) enthalten ist? -> String | Android Developers
 
passiert auch nichts

Der ursprüngliche Beitrag von 20:45 Uhr wurde um 20:46 Uhr ergänzt:

myeta schrieb:
Hrhr natürlich nicht - mein Fehler:
Wenn überhaupt dann so:

Code:
if (zahl1 % 1.0 == 0){
zahl1 = Math.round(zahl1*1/1d);
}
if (zahl2 % 1.0 == 0){
zahl2 = Math.round(zahl2*1/1d);
}
Greets

passiert nichts
 
Ich glaub mein Schwein pfeifft - ich erzähl dir ja nur Sch***...

Ich geb dir jetzt keinen fehlerhaften Code mehr^^

durchsuch den String aus dem Edittext nach ",00" und wenns vorhanden ist ersetzte es durch "" ;)

Greets
 
  • Danke
Reaktionen: Muha2
ich will natürlich nicht nerven aber es gibts auch ergebnisse mit ,00355 oder ,00005 XD
dann wird auch aus zb 2,0075=275
 
Also wenn ich den Thread richtig interpretiert habe geht es darum einen Double auf die nächste Ganzzahl zu runden?

Wenn ja, folgend mein Ansatz ansonsten Post getrost ignorieren :huh:

Code:
Double zahl1 = 10.4242;
BigDecimal bigDec = new BigDecimal( zahl1 );
bigDec = bigDec.setScale( 0, BigDecimal.ROUND_HALF_UP );

String alsString = bigDec.toString();
int alsInt = bigDec.intValue();
long alsLong = bigDec.longValue();

Zuerst wird aus dem Double ein BigDecimal erstellt. Das erleichtert zum einem das runden und wir stellen im Gegensatz zum Double die volle Nachkommastellen-Präzision sicher.

Die setScale-Methode erwartet als ersten Parameter die Anzahl an Nachkommastellen. In unserem Beispiel also 0, da wir auf die nächste Ganzzahl runden wollen.
Der zweite Parameter regelt die Art des Rundens. In diesem Fall wird das kaufmännische Runden verwendet, wo ab 5 aufgerundet wird.

Anschließend bietet die BigDecimal Klasse diverse Methoden die aus dem komplexen Datentypen die entsprechenden Primitives wie int und long zurückliefern.

Ich hoffe das hilft dir weiter :)

Update:
Bezüglich dem Thema wie festgestellt werden kann ob es sich auch um eine Zahl handelt.
Einfach den String versuchen in einen Double umzuwandeln (Double.valueOf(String)).
Ist es keine Zahl wird eine Exception geworfen und du kannst dir sicher sein, dass es sich um keine Zahl handelt :)
 
Zuletzt bearbeitet:
Rechnen sollte man wirklich immer mit BigDecimal.

Um Zahlen zu parsen oder zu formatieren, nimmt man üblicherweise die Klasse NumberFormat.

Al
 
Zahlen formatieren kann man auch so:
Code:
System.out.println(new DecimalFormat("#.##").format(0.123));
System.out.println(new DecimalFormat("#.##").format(123.45));

System.out.println(new DecimalFormat("#.###").format(0.123));
System.out.println(new DecimalFormat("#.###").format(123.45));

System.out.println(new DecimalFormat("#").format(0.123));
System.out.println(new DecimalFormat("#").format(123.45));
 
Zurück
Oben Unten