The way I understand oblivion floats is that they can hold the 7 most significant digits, no matter the decimal point.
So, a float can hold 1,234,567,000,000, but will not hold 1,234,567,800,000 (the 8 would be lost)
The same way, 0.0000001234567 is OK while 0.00000012345678 would lose the 8.
This way, Gamehour will have up to 5 decimal places: hh.ddddd, which is a precision of about 1/20 of a second.
But if you use GameDaysPassed plus hours (as fractions of a day), you would have max = DDD.dddd, which is a precision of about 10 seconds. When you get to GameDaysPassed = 1000, your precision drops to three decimals (DDDD.ddd), or about one minute.
If this may be of any help, I timestamp all my console lines with the following code:
float v short iHourstring_var sTime;-------------------------------; Set timestamp string;-------------------------------set v to GameHour ;= hh.ddddset iHour to GameHour ; integer if iHour < 10 let sTime := "0" + sv_construct "%0.0f:" iHourelse let sTime := sv_construct "%0.0f:" iHourendifset v to (v - iHour) * 60 ;= mm.ddddset iMin to v ;= mmif iMin < 10 let sTime := sTime + "0" + sv_construct "%0.0f:" iMinelse let sTime := sTime + sv_construct "%0.0f:" iMinendifset v to (v - iMin) * 60 ;= ss.ddddif v < 10 let sTime := sTime + "0" + sv_construct "%2.1f " velse let sTime := sTime + sv_construct "%2.1f " vendif