Konvertierung double2int



  • Hallo Zusammen,

    Ich habe 2 double Werte die Zeitstempel enthalten. Diese möchte ich subtrahieren
    und die Differenz in ms erhalten.

    tempDeltaTime, can.Time und LastTime sind vom Typ double.
    can.DeltaTime ist vom Typ int.

    tempDeltaTime = ((can.Time*1000) - (LastTime*1000));
    can.DeltaTime = (int)tempDeltaTime;	
    LastTime = can.Time;
    

    Bsp:
    can.Time = 0.0031080 //3,1080ms
    LastTime = 0.0028410 //2,8410ms
    (Die Zeitstempel haben später auch größere Werte im Sekunden Bereich.)

    Hier wäre mein Ziel für can.DeltaTime = 1 zu erhalten.
    Es kommt aber 0 heraus.

    Wie kann ich das beheben?

    Für Tipps bin ich sehr dankbar 👍 .



  • can.Time = 0.0031080 //3,1080ms
    LastTime = 0.0028410 //2,8410ms 
    
    tempDeltaTime = ((can.Time*1000) - (LastTime*1000));  // tempDeltaTime = 0,267
    can.DeltaTime = (int)tempDeltaTime;                   // zuerst der cast, also 0
    LastTime = can.Time;
    

    Somit alles richtig gerechnet.

    Die Frage ist, was du willst:
    Soll der Wert ab 0,5ms aufgerundet werden oder schon ab 0,0001ms oder oder oder?

    can.Time = 0.0031080 //3,1080ms
    LastTime = 0.0028410 //2,8410ms 
    
    can.DeltaTime= (int)((can.Time*1000) - (LastTime*1000) + 500); // so sollte es (ungetestet) für den ersten genannten Fall gehen
    can.DeltaTime= (int)((can.Time*1000) - (LastTime*1000) + 999); // so sollte es (ungetestet) für den zweiten genannten Fall gehen
    LastTime = can.Time;
    

    Edit:
    Wobei ich mir die Frage stelle, woher du einen Timestamp als Float bekommst?



  • Den timestamp lese ich aus einem file ein.

    can.Time = atof(ptr);
    

    Mein Ziel wäre es für DeltaTime 1 ms zu erhalten. die Mikrosekunden können abgeschnitten werden. Es ist kein Runden notwendig.



  • Das hängt von deinem Compiler ab. Es gibt da seit C90 ceil


Anmelden zum Antworten