Forum: Mikrocontroller und Digitale Elektronik Prozentrechnung mit Integer


von Alexander A. (alex0815)


Lesenswert?

Hallo,

ich habe eine Prozentrechnung vor, der "imp2 kommt alle 1ms und soll den 
Wert "jalTime[ArrayNrImpSpeicher] +=1;" erhöhen und somit von 0-100% 
steigen. Die Berechnung mache ich so und klappt leider nicht:
(PS.: ich habe sie schon extra in drei Zwischenschritte 
aufgeteilt....Ziel ist es natürlich in einer Zeile zu erledigen!
1
uint16_t array_time_open[20] = {500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
2
uint16_t array_time_close[20] = {20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
3
int temp1 = 0;
4
float temp2 = 0;
5
int temp3 = 0;


1
void JalTimmeMessen (bool imp, uint8_t ArrayNrImpSpeicher, bool auf, bool ab) 
2
{
3
4
5
6
7
 if (auf && imp)
8
  {
9
  
10
  
11
  jalTime[ArrayNrImpSpeicher] +=1;
12
  
13
  
14
15
  
16
  if ((jalTime[ArrayNrImpSpeicher]%10)==0)
17
    {
18
    
19
  temp1 = array_time_open[ArrayNrImpSpeicher] - array_time_close[ArrayNrImpSpeicher];
20
  usart_write_int0(temp1);
21
  
22
  temp2 = jalTime[ArrayNrImpSpeicher] / temp1;
23
  usart_write_int0(temp2);
24
  
25
  temp3 = temp2 * 100;
26
  usart_write_int0(temp3);
27
  
28
  
29
  
30
    }
31
  }
32
}

temp1 zeigt :480 an
temp2: 0
temp3:0

Eigentlich sollte in temp3 0-100% stehen?!?!
Wie kriege ich das denn wohl hin?

von Apfelmann (Gast)


Lesenswert?

mach zuerst *100 und dann erst /temp1

von Alexander A. (alex0815)


Lesenswert?

Jau klappt, danke

von Falk B. (falk)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Und weils wichtig ist:
Zu deinem Denkfehler

  temp2 = jalTime[ArrayNrImpSpeicher] / temp1;

jalTime[ArrayNrImpSpeicher]    ist (offenbar) ein int
temp1                          ist ein int

Damit wird ein int durch einen int dividiert, und das liefert ein int 
Ergebnis.

Das du dieses int-Ergebnis an einen float zuweist

   temp2 = ....

ist zwar nett, aber für die Division unerheblich. Wo keine Kommazahlen 
enstehen, können auch keine gespeichert werden.

FAQ: Datentypen in Operationen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.