DisplayFormatierung

Hallo,

 if (EXrF >=  100)
    {lcd.setCursor(14, 1);
  lcd.print(EXrF,0);
    lcd.print("%");}
    else
    {lcd.setCursor(15, 1);
    lcd.print(EXrF,1);
    lcd.print("%");}

Es ist doch so, das wenn EXrF größer als 100 ist, bei 14,1 geschrieben wird?
Es ist doch so, das wenn EXrF gleich 100 ist, auch bei 14,1 geschrieben wird?

ist 100 etwas anderes, wird bei 15,1 geschriebn?

Wenn EXrF 100 ist, dann schreibt der nicht bei 14,1

hier ist noch einer, der nicht funktioniert:

if ((EXcT >= 0) && (EXcT < 10)) 
{
lcd.setCursor(15, 0);
lcd.print(" ");
lcd.print(EXcT,1);
lcd.write(GradSym);
}
else
{
  lcd.setCursor(15, 0);
    lcd.print(EXcT,1);
    lcd.write(GradSym);
  }

Wenn EXcT 10 ist, dann schreibt er bei 15,0 mit Leerstelle!
Wo habe ich denn da einen Denkfehler?
Gruß und Dank
Andreas

Ich kann Dir nicht folgen.
Welchen Typ ist die Variable EXrF?
Grüße Uwe

Hallo,
EXcT ist float.
Kann aber doch keine Rolle spielen. Bis 10 mache DAS- ab 10 mache DIESES. Macht er aber nicht.
Gruß und Dank
Andreas

Nein. Mir scheint alles richtig
Grüße Uwe

Bei

float EXrF = 99.6;

wird auf (15,1) "100" geschrieben. :frowning:

Einfacher ist es, wenn du es so machst:

unsigned int EXrFi = EXrF; // Wir brauchen keine float Zahl
if (EXrFi >=100)  lcd.setCursor(14, 1);
else if (EXrFi >=10)  lcd.setCursor(15, 1);
else  lcd.setCursor(16, 1);
lcd.print (EXrFi); lcd.writet ('%');

Hallo,
ja- genau. Das ist ja das Problem. Ich kann da auch keine Fehler finden.
Wenn man von einer Stelle ausgeht:
if ((EXcT >= 0) && (EXcT < 10))

d.h. die Bedingung ist erfüllt wenn der Wert im Bereich von 0.0 bis 9.9 liegt.
sie ist nicht erfüllt, wenn der Wert -0.1 ist oder der Wert 10 ist.
Wenn der Wert 10 ist, dann sieht der Arduino die Bedingung als erfüllt an.

Es scheint mir aber so, das er das nur "einmal" macht.
9.8, 9.9, 10.0 die Bedingung ist efüllt, ist aber falsch- weil Wert 10.0
10.1, 10.2 10.3 die Bedingung ist nicht erfüllt, das ist richtig.
Es kann doch nicht sein, das der die 10 beim ersten Mal an falscher Stelle
schreibt? Der Wert wird nur einmal geliegert.
Gruß und Dank
Andreas

Hallo,

könnte das mit den internen Rundungen/Ungenaugkeiten von float Zahlen zusammenhängen?
Was zeigt Dir der serielle Monitor an wenn Du Dir die float Zahl vor der Prüfung ausgeben lässt?
Wenn Du sie vorher in eine Ganzzahl wandelst, funktioniert es dann?

Hallo,
ist ja nicht zu fassen, 9.95 Grad und er zeigt mir 10 Grad an.
EXcT EXcT,1
vor if 9.95 10.0
in if 9.95 10.0

Das ist eine Differenz von 5/100 Grad! Mal sehen ob ich damit leben kann. :slight_smile:
Gruß und Dank
Andreas

Hallo,

hatte ich mir fast gedacht. :slight_smile:
In dem Fall rundet er/sie/es richtig, wenn Du sie mit einer Kommastelle anzeigen lässt. Rundungsregel wurde richtig angewandt.
Die letzte 5 von 9,95 bedeutet aufrunden. Demnach wird aus 9,95 richtigerweise 10,0. Aus 9,94 sollte 9,9 werden.
Wenn Du 2 Kommastellen der float behalten möchtest, mußt Du vorher mit 100 multiplizieren und dann den Rest abschneiden. Sollte durch Wandlung in eine Ganzzahl möglich sein. Dann könnte man statt auf <10 auf <1000 prüfen.
Wenn das so möglich ist in Deinem Programm.

Edit:
andere Idee. Was passiert wenn Du beim bisherigen Code nicht auf <10 sondern auf <10.00 abfragst?

Hallo,
es ist vorher ja int. float wird erst am Ende draus- eine Stelle. Ich habe
hier schon geeiert wie ein Blöder, das war mir aber alles zu umständlich, um
für eine "Anzeige" so einen Aufwand zu betreiben.
Ich frage jetzt auf 9.94 ab. Das ist "Logisch" zwar Dreck, aber für eine
Anzeige ausreichend.
Allerdings ist es auch so, das es anfängt mich zu stören, das etwas nicht ganz
richtig ist. Ich werde das wohl auseinander nehmen und auf 10.0 abfragen.
Schönen Dank für Deine Mühe.
Gruß
Andreas
P.S. die 10.00 funktioniert auch nicht- kann ja auch nicht.

Was passiert wenn Du beim bisherigen Code nicht auf <10 sondern auf <10.00 abfragst?

Das gleiche.
Das Problem ist nicht der Vergleichswert, sondern die Variable.
(9.9999 < 10.0) wird aber bei print(x,2) wie gewünscht als 10.00 ausgegeben, 9.99 wäre falsch !

Im übrigen wäre es besser, bei kleinen Zahlen ein zusätzliches Leerzeichen auszugeben, statt weiter rechts anzufangen.
Dann bleibt nichts von der vorigen Ausgabe hängen.

Hallo michael_x
das ist ja richtig! Ich brauche keine float. Ich frage ja auf eine ganze Zahl ab. Was gehen mich hier die Nachkommastellen an.
Gruß und Dank
Andreas

Ich brauche keine float

Dann verwende auch keine, dann brauchst du auch nicht solche Klimmzüge wie auf 9.94 abzufragen.