hunderstel Sekunden in mm:ss:hshs konvertieren

Lexi

Bekanntes Mitglied
Ich bin gerade dabei Hunderstelsekunden in Minuten, Sekunden, und Hundertselsekunden darzustellen. Das konvertieren wird von einer Methode übernommen, welche als Parameter ein int erwartet und einen String in Form von "mm:ss:hshs" zurückgibt.
Also 2409 => "00:24:09".
Das ganze klappt auch ganz gut, blöderweise wird von Zeit zu Zeit mein Ergebnis durch Ungenauigkeiten mit double-Werten verfälscht. Jetzt suche ich einen Algorithmus der evtl ohne double Zahlen auskommt, oder es schafft diese Ungenauigkeiten zu umgehen.

Hier mein bisheriger "double-Ansatz" :
Java:
public String timeToString(int iTime){
		int min = (int) (iTime / 6000);
		System.out.println(min);
		double dSec = ((iTime/ 6000.0) - min);
		System.out.println(dSec);
		double restSec = dSec *60;
		System.out.println(restSec);
		int sec = (int)restSec;
		System.out.println(sec);
		int hSec = (int) ((restSec - sec)*100);
		System.out.println(hSec);
		return underTen(min)+":"+underTen(sec)+":"+underTen(hSec);
	}

private String underTen(int number) {
		return number < 10 ? "0" + number : ""+number;
	}

Wenn ich der timeToString Methode jetzt 27 übergebe, bekomme ich folgendes ausgegeben:
Code:
0
0.0045
0.26999999999999996
0
26
00:00:26

Das Problem liegt wohl in Zeile drei(Konsolenausgabe), wo eigentlich 0.27 und nicht 0.2699999999999... stehen sollte.

Ich würde mich über Lösungsansätze freuen.
 

eRaaaa

Top Contributor
naja, das Problem ist, bei int wird halt immer "abgerundet"...sprich bei 26.9... wird das bei deinem Cast auf int zu 26

Mit
Java:
	int hSec = (int) Math.round(((restSec - sec) * 100));

sollte das vllt sogar schon klappen ?! (ohne Gewähr - 2 Uhr ! ;D )
 

Lexi

Bekanntes Mitglied
Mist :D

Ich hatte mich eben natürlich auch zunächst an
Code:
Math.round()
gewendet, blöderweise habe ich dort wohl die ein oder andere Klammer vergessen, was dann zu einem ungewollten Ergebnis führte.

Danke dir, funktioniert einwandfrei :)
 

eRaaaa

Top Contributor
Ne das war zu schnell geantwortet und ist murks..(*nochmal ne Sekunde drüber nachdenk*)

Java:
    public static String timeToString(int iTime) {
	int hSec = iTime % 100;
	int rest = iTime - hSec;
	int sec = rest / 100 % 60;
	int min = rest / 100 / 60;
	return underTen(min) + ":" + underTen(sec) + ":" + underTen(hSec);
    }
 
Zuletzt bearbeitet:

Lexi

Bekanntes Mitglied
Aber bei klappt es :bahnhof:
Ich gebe 27 ein und bekomme "00:00:27"
Edit: ok, doch nicht, jetzt hakt es an einer anderen Stelle.
Edit2: Danke für den Nachtrag, nun scheint alles wie gewollt zu laufen.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben