float Nachkommastelle abschneiden

Gast #2295510
Lesenswert?

Hallo, ich habe eine Funktion in der ich einen Wert berechne. Das 
Ergebnis ist "float" und hat ein Paar Nachkommastellen. Jetzt möchte ich 
gerne alle Nachkommastellen bis auf zwei abschneiden. Gibt es einen 
einfachen Weg das zu realisieren?

Danke
1
void configuration (float baudrate)
2
{
3
  float period;
4
  period=(((1/baudrate)*12)*1000000);
5
}
Gast #2295522
Lesenswert?

Alternativ, wenn über die Größe der Werte keine Aussage gemacht werden 
kann:

1
#include <math.h>
2

3
void
4
configuration(float baudrate) {
5
  float period = (((1/baudrate)*12)*1000000);
6
  period = truncf(period * 100.f) / 100.f;
7
}

Statt truncf zum Abschneiden der Nachkommastellen kann auch roundf, 
floorf oder ceilf verwendet werden (Runden, Abrunden, Aufrunden). Das 
Suffix "f" steht dabei jeweils für die float-Variante (im Gegensatz zu 
double).
#2296373
Lesenswert?

Beginner schrieb:
> Hm, is etwas schwieriger als erwartet. Die Funktion mit int kann ich
> nicht nutzen da ich ausserhalb des Bereichs bin bei 9600->temp=125000.

Na ja, du kannst ja auch noch auf long ausweichen.

Wozu willst du eigentlich die Kommastellen abschneiden? Wenn es wegen 
einer Ausgabe ist -> das macht man anders. Da sagt man der 
Ausgabefunktion, dass man 2 Nachkomastellen haben will.

Und warum eigentlich float?
Auf einem PC willst du float nicht benutzten und wenn doch, dann nur 
unter Protest und mit einem extrem guten Grund. In allen anderen Fällen 
immer double nehmen. Auf eienm PC ist float nicht schneller als double 
(rechnet alles der Coprozessor). Aber float hat eine deutlich geringere 
Auflösung als double. Und das kann dir schon mal den Schlaf rauben, wenn 
du damit klarkommen musst, dass alles nach der 6-ten Stelle nur noch 
gelogen ist.
Gast #2296399
Lesenswert?

Hallo, ich benutze eine fertige Timer Funktion von der TI Homepage,
1
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
2
{
3
    Uint32  temp;
4

5
    // Initialize timer period:
6
    Timer->CPUFreqInMHz = Freq;
7
    Timer->PeriodInUSec = Period;
8
    temp = (long) (Freq * Period);
9
    Timer->RegsAddr->PRD.all = temp;
10

11
    // Set pre-scale counter to divide by 1 (SYSCLKOUT):
12
    Timer->RegsAddr->TPR.all  = 0;
13
    Timer->RegsAddr->TPRH.all  = 0;
14

15
    // Initialize timer control register:
16
    Timer->RegsAddr->TCR.bit.TSS = 1;      // 1 = Stop timer, 0 = Start/Restart Timer
17
    Timer->RegsAddr->TCR.bit.TRB = 1;      // 1 = reload timer
18
    Timer->RegsAddr->TCR.bit.SOFT = 1;
19
    Timer->RegsAddr->TCR.bit.FREE = 1;     // Timer Free Run
20
    Timer->RegsAddr->TCR.bit.TIE = 1;      // 0 = Disable/ 1 = Enable Timer Interrupt
21

22
    // Reset interrupt counter:
23
    Timer->InterruptCount = 0;
24
}

Eine andere Frage, ist es erlaubt Kommazahlen Registern zuzuweisen??

Gruß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren