Sekunden runden

JüKo

Level-2
Beiträge
87
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,
wie kann ich den Zeitwert einer Variablen runden. Die Millisekunden werden einfach abgeschnitten. Ich hätte den Wert gerne gerundet.
Als Beispiel: 12234ms sollen 12 Sekunden und 12765ms sollen 13 Sekunden werden.
Danke vorab und freundliche Grüße,
Jürgen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie kann ich den Zeitwert einer Variablen runden. Die Millisekunden werden einfach abgeschnitten. Ich hätte den Wert gerne gerundet.
Als Beispiel: 12234ms sollen 12 Sekunden und 12765ms sollen 13 Sekunden werden.

Addiere 500ms vor dem Runden dazu.

ja keine Ahnung, was Du genau rechnest oder wie Du rundest, aber:


Code:
12234 / 1000 = 12
12765 / 1000 = 12

12234 + 500 = 12734  ->  12734 / 1000 = 12
12765 + 500 = 13265  ->  13265 / 1000 = 13

PS. zu spät :ROFLMAO:
 
Die Millisekunden werden einfach abgeschnitten. Ich hätte den Wert gerne gerundet.
(...) 12765ms sollen 13 Sekunden werden.
"abschneiden" bedeutet: es wird immer abgerundet. Will man ab x.5x aufrunden, dann muß man zunächst 0.5 dazu addieren, damit das nachfolgende unvermeidliche abrunden zum gewünschten Ergebnis führt.

Harald
 
ja, und um den TE nochmehr zu verwirren, kommts natürlich drauf an, welchen Datentyp die Variable hat, also Ganzzahl, Festkommazahl oder Gleitkommazahl, welche Rechenoperation man macht, ob Datentypumwandlungen passieren oder welchen Rundungsbefehl man verwendet... Und natürlich was man warum überhaupt machen will :ROFLMAO:

also wie immer, der Code wäre interessant, welcher "nicht funktioniert"

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab es jetzt so gemacht. Spricht da was dagegen?
ZeitGerundet:= REAL_TO_TIME ( TIME_ZO_REAL (Zeit))/1000*1000;
Oder ist die andere Variante mit den +500ms sinnvoller?
 
Ich hab es jetzt so gemacht. Spricht da was dagegen?
ZeitGerundet:= REAL_TO_TIME ( TIME_ZO_REAL (Zeit))/1000*1000;
Oder ist die andere Variante mit den +500ms sinnvoller?

Als Beispiel: 12234ms sollen 12 Sekunden und 12765ms sollen 13 Sekunden werden.

Was soll sich an deinem RealWert denn groß ändern, wenn du ihn durch 1000 teilst und wieder mit 1000 mutliplizierst :confused:
 
Damit rundest Du ja immer nur nach unten.

Generell kannst Du direkt mit den ms arbeiten, TIME ist intern ein DWord. Da sparst Du Dir die Umwandlung und dem Prozessor die Fließkommaberechnung.
 
Oder ist die andere Variante mit den +500ms sinnvoller?
Die +500ms-Variante ist einfacher/direkter/durchschaubarer und unabhängig von evtl. "Störungen" durch die Eigenarten von REAL-Zahlen.

Deine Variante mit '/1000*1000' ist jedenfalls vergebliche Liebesmüh.

PS:
Zu hp25-Zeiten habe ich, um auf ganze Zahlen zu runden, nicht 0,5 sondern 'FRAC' der zu rundenden Zahl draufaddiert.
FRAC isolierte die NachkommaStellen. Klingt komplizierter/aufwändiger, als 0,5 zu addieren, ist aber das gleiche Prinzip und sparte ProgrammSpeicherplatz.
 
Zuletzt bearbeitet:
UPS Formel war falsch, so ist es richtig
ZeitGerundet:= REAL_TO_TIME ( TIME_TO_REAL (Zeit)/1000*)1000;
Scheint so zu funktionieren
 
Ich hab es jetzt so gemacht. Spricht da was dagegen?
ZeitGerundet:= REAL_TO_TIME ( TIME_ZO_REAL (Zeit))/1000*1000;
Oder ist die andere Variante mit den +500ms sinnvoller?

Was für eine Energieverschwendung. Ich habe jetzt die Diskussion mit verfolgt und da krieg ich echt eine Maulsperre.

Frage an den TE: Warum startest Du eigentlich dieses Thema? Es gibt sicher mehrere Lösungen. Die einfachste wurde Dir aufgezeigt und mehrfach bestätigt. Hast Du die jemals ausprobiert oder überhaupt verstanden?
Stattdessen kommst Du mit einer eigenen Lösung - ist an und für sich nicht verkehrt - aber was hier an Resourcen dafür gebunden wurde...

Das Thema wäre normalerweise nach Beitzrag #1 gelöst gewesen.
 
Und da kommt bei 12700ms 13 raus??
Das war doch deine Anforderung
Jain, Michael, nicht so voreilig, die Anforderung war ...

Als Beispiel: 12234ms sollen 12 Sekunden und 12765ms sollen 13 Sekunden werden.
13 Sekunden = 13.000 ms.

Sorry, asci25, dass jetzt noch mehr verschwendete/verschwundene Energie dazu gekommen ist.
Ausgerechnet jetzt, da man ohnehin nicht mehr sicher sein kann, ob das "klimaneutrale" CO[SUB]2[/SUB] überhaupt wieder durch PhotoSynthese gebunden werden kann, zumal sogar der BorkenKäfernSchwemme der HungerTod droht ... ;)

PS:
mich wundert eigentlich, dass ausgerechnet die Chinesen unseren HolzMarkt leerfegen, wo sie doch sonst nicht mal HolzPaletten u.ä. ins Land lassen, aus Panik vor den importierten Parasiten. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jain, Michael, nicht so voreilig, die Anforderung war ...


13 Sekunden = 13.000 ms.

Sorry, asci25, dass jetzt noch mehr verschwendete/verschwundene Energie dazu gekommen ist.
Ausgerechnet jetzt, da man ohnehin nicht mehr sicher sein kann, ob das "klimaneutrale" CO[SUB]2[/SUB] überhaupt wieder durch PhotoSynthese gebunden werden kann, zumal sogar der BorkenKäfernSchwemme der HungerTod droht ... ;)

PS:
mich wundert eigentlich, dass ausgerechnet die Chinesen unseren HolzMarkt leerfegen, wo sie doch sonst nicht mal HolzPaletten u.ä. ins Land lassen, aus Panik vor den importierten Parasiten. :ROFLMAO:

Also vielleicht habe ich irgendwas nicht verstanden.
Er wollte, das bei 12765 MS 13s rauskommt. Aber mit seinem Code schneidet er doch nur drei Stellen weg, es kommt also 12 statt der gewünschten 13 raus.

Oder habe ich hier etwas falsch verstanden
 
Aber mit seinem Code schneidet er doch nur drei Stellen weg, es kommt also 12 statt der gewünschten 13 raus.
Ich unterstelle (vielleicht zu Unrecht), dass bei der Umwandlung von REAL in was Ganzahliges tatsächlich auch gerundet wird. Aber für REAL-Zahlen gibt es doch auch eine Funktion, die rundet. Die könnte man vorsichtshalber doch noch dazustricken, wenn man partout keine 500 addieren mag. ;)

PS:
Du hast gesehen, dass der TE eine Klammer verschoben hat seit seinem ursprünglichen Lösungsweg?
 
Zurück
Oben