INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Berechnung in einer Variablen
28.09.2014, 20:30
Beitrag #1
Berechnung in einer Variablen
Hallo. Ich definiere mit "int" eine Variable, in der später eine Berechnung erfolgt. Das sieht z. B. folgendermaßen aus:
Code:
int var = 1300;
int prozentanteil = 100 / 1500 * var;
Bei einem serial.print(prozentanteil); wird mir bloß "0" ausgegeben. Wie kann das sein?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.09.2014, 20:46
Beitrag #2
RE: Berechnung in einer Variablen
Hi,
"int" kann nur ganze Zahlen. "100" sowohl "1500" sind auch ganze Zahlen. Bei der Berechnung von 100 / 1500 kommt daher 0 raus. 0 * irgendwas bleibt 0.
Versuch mal
int prozentanteil = 100.0 / 1500 * var;
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2014, 05:27
Beitrag #3
RE: Berechnung in einer Variablen
(28.09.2014 20:46)Thorsten Pferdekämper schrieb:  Hi,
"int" kann nur ganze Zahlen. "100" sowohl "1500" sind auch ganze Zahlen. Bei der Berechnung von 100 / 1500 kommt daher 0 raus. 0 * irgendwas bleibt 0.
Versuch mal
int prozentanteil = 100.0 / 1500 * var;
Gruß,
Thorsten

Thorsten du meintest sicherlich:
int prozentanteil = 100.0 * var / 1500;
Habs nicht getestet, wäre aber logisch.
Wobei hier der Wertebereich einer int Variablen überschritten wird...Sleepy
also entweder int gleich durch float ersetzen oder wenns Ganzzahlig bleiben soll
mit long int dann reicht der Wertebereich wieder.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2014, 06:14
Beitrag #4
RE: Berechnung in einer Variablen
Hi Bitklopfer,
rein mathematisch ist 100 / 1500 * var = 100 * var / 1500. Vom Wertebereich ist aber 100.0 / 1500 * var die meiner Meinung nach geschicktere Berechnung. Allerdings ist aber auch das egal, da das System in dem Fall (wegen 100.0) sowieso mit float oder double rechnet und erst zum Schluss in int umwandelt.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2014, 19:12
Beitrag #5
RE: Berechnung in einer Variablen
Das hat mir geholfen. Ich danke euch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.09.2014, 17:33 (Dieser Beitrag wurde zuletzt bearbeitet: 30.09.2014 17:42 von Corvus.)
Beitrag #6
RE: Berechnung in einer Variablen
(29.09.2014 06:14)Thorsten Pferdekämper schrieb:  Hi Bitklopfer,
rein mathematisch ist 100 / 1500 * var = 100 * var / 1500. Vom Wertebereich ist aber 100.0 / 1500 * var die meiner Meinung nach geschicktere Berechnung. Allerdings ist aber auch das egal, da das System in dem Fall (wegen 100.0) sowieso mit float oder double rechnet und erst zum Schluss in int umwandelt.
Gruß,
Thorsten
Tatsächlich wäre hier (unsigned long)100 * var / 1500.0 die bessere Variante. Da sich in einer 4 Byte Ganzzahlvariable das Zwischenergebnis binär präzise abbilden lässt was bei einer 4 Byte Fließkommavariable leider nicht immer der Fall ist und somit zu Rundungsfehlern führen kann. Diese sind zwar meistens vernachlässigbar, führen aber gerade dann zu Fehlern wenn man nicht damit rechnet.
Zur Verdeutlichung hier ein kleiner Beispiel-Sketch:
Zitat:void setup(){
  Serial.begin(9600);
}

void loop(){
  if (100 == (unsigned long)100*361/361.0) {
    Serial.println("100 == (unsigned long)100*361/361.0");
  }
  else {
    Serial.println("100 != (unsigned long)100*361/361.0");
  } 
  if (100 == (100.0/361*361)) {
    Serial.println("100 == 100.0/361*361");
  }
  else {
    Serial.println("100 != 100.0/361*361");
  } 
  delay(1000);
}
Dieser führt zu folgender Ausgabe:
Code:
100 == (unsigned long)100*361/361.0
100 != 100.0/361*361
gruß lorenz

edit: Bit in Byte korrigiert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.09.2014, 17:36
Beitrag #7
RE: Berechnung in einer Variablen
Hi Lorenz,
Du hast Recht, wenn man in Deinem Text "Bit" durch "Byte" ersetzt.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.09.2014, 17:40
Beitrag #8
RE: Berechnung in einer Variablen
(30.09.2014 17:36)Thorsten Pferdekämper schrieb:  Hi Lorenz,
Du hast Recht, wenn man in Deinem Text "Bit" durch "Byte" ersetzt.
Gruß,
Thorsten

jup, übersehen. danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Poti Differenz Berechnung Kitt 9 175 09.12.2016 15:55
Letzter Beitrag: Tommy56
  Ausschaltverzögerung bei einer PV Heizung Hans_Maulwurf 27 749 29.11.2016 23:38
Letzter Beitrag: georg01
  Innenwiderstand einer Batterie (Rundzelle 1,5V) Einsteiger94 2 207 24.07.2016 11:42
Letzter Beitrag: SkobyMobil
  Variablen over/underflow "deaktivieren" Scheams 6 225 23.06.2016 16:36
Letzter Beitrag: Scheams
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 538 23.04.2016 10:26
Letzter Beitrag: rkuehle
  I2C Ansteuerung einer MSM3 (elv mp3 Box) Voreifel 2 316 09.04.2016 17:56
Letzter Beitrag: Voreifel
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 491 01.04.2016 05:49
Letzter Beitrag: MartinK
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 516 29.03.2016 16:45
Letzter Beitrag: MartinK
  Inhalt einer Variable mit per Virtual Wire versenden toto1975 17 1.775 26.03.2016 18:57
Letzter Beitrag: hotsystems
Exclamation String Zerlegen in drei Variablen Wampo 4 856 28.12.2015 01:07
Letzter Beitrag: Wampo

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste