Hi ich hab ein kleines Problem:
Ich arbeite im Moment an einem Taschenrechner mit sehr sehr vielen Funktionen (bis jetzt 1800 Zeilen Quellcode).
Jetzt wollte ich noch diverse Zeitrechnungen hinzufügen (die mithilfe der BigNum.au3 rechnen).
Dabei gibt es aber Probleme bei den Millisekunden. (Alle Einheiten werden immer erst in Minuten umgerechnet und dann in die Angegebene Einheit in die umgerechnet werden soll)
Spoiler anzeigen
#include <Math.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <Array.au3>
#include <String.au3>
#include <EditConstants.au3>
#include <GuiEdit.au3>
#include <TabConstants.au3>
#include <ComboConstants.au3>
#include <IE.au3>
#include <INet.au3>
#include <File.au3>
#include <BigNum.au3>
Global $hZeitGUI, $hZeitIn, $hZeitInput, $hZeitOut, $hZeitOutput, $hZUmrechnerBtn
[/autoit] [autoit][/autoit] [autoit]_ZeitGUI()
[/autoit] [autoit][/autoit] [autoit]While True
Sleep(10)
WEnd
Func _ZeitGUI()
Opt("GUIOnEventMode", 1)
$bZeit = 1
$hZeitGUI = GUICreate("Zeitrechner", 400, 200, -1, -1)
GUISetOnEvent(-3, "_EndZeit", $hZeitGUI)
$hTabZeit = GUICtrlCreateTab(0, 0, 400, 200)
GUICtrlCreateTabItem("Zeitumrechnung")
GUICtrlCreateLabel("=>", 185, 21, 28, 23)
GUICtrlSetFont(-1, 20)
$hZeitIn = GUICtrlCreateCombo("Millisekunden", 5, 25, 160, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Sekunden|Minuten|Stunden|Tage|Wochen|Jahre")
$hZeitOut = GUICtrlCreateCombo("Millisekunden", 233, 25, 160, 20, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Sekunden|Minuten|Stunden|Tage|Wochen|Jahre")
$hZeitInput = GUICtrlCreateInput("", 5, 55, 160, 20)
$hZeitOutput = GUICtrlCreateInput("", 233, 55, 160, 20, $ES_READONLY)
$hZUmrechnerBtn = GUICtrlCreateButton("Umrechnen", 150, 85, 100, 25)
GUICtrlSetOnEvent(-1, "_ZeitBerechnung")
GUICtrlCreateTabItem("Datumsdifferenz Berechnung")
GUISetState()
EndFunc
Func _ZeitBerechnung()
Switch @GUI_CtrlId
Case $hZUmrechnerBtn
$iZInput = GUICtrlRead($hZeitInput)
Switch GUICtrlRead($hZeitIn)
Case "Millisekunden"
$iZMin = _BigNum_Div(_BigNum_Div($iZInput, 1000), 60)
Case "Sekunden"
$iZMin = _BigNum_Div($iZInput, 60)
Case "Minuten"
$iZMin = $iZInput
Case "Stunden"
$iZMin = _BigNum_Mul($iZInput, 60)
Case "Tage"
$iZMin = _BigNum_Mul(_BigNum_Mul($iZInput, 24), 60)
Case "Wochen"
$iZMin = _BigNum_Mul(_BigNum_Mul(_BigNum_Mul($iZInput, 7), 24), 60)
Case "Jahre"
$iZMin = _BigNum_Mul(_BigNum_Mul(_BigNum_Mul(_BigNum_Mul($iZInput, 52), 7), 24), 60)
EndSwitch
ConsoleWrite("@@DEBUG $iZMin = " & $iZMin & @CRLF)
Switch GUICtrlRead($hZeitOut)
Case "Millisekunden"
$iZResult = _BigNum_Mul(_BigNum_Mul($iZMin, 60), 1000)
Case "Sekunden"
$iZResult = _BigNum_Mul($iZMin, 60)
Case "Minuten"
$iZResult = $iZMin
Case "Stunden"
$iZResult = _BigNum_Div($iZMin, 60)
Case "Tage"
$iZResult = _BigNum_Div(_BigNum_Div($iZMin, 60), 24)
Case "Wochen"
$iZResult = _BigNum_Div(_BigNum_Div(_BigNum_Div($iZMin, 60), 24), 7)
Case "Jahre"
$iZResult = _BigNum_Div(_BigNum_Div(_BigNum_Div(_BigNum_Div($iZMin, 60), 24), 7), 52)
EndSwitch
GUICtrlSetData($hZeitOutput, $iZResult)
EndSwitch
EndFunc
Func _EndZeit()
$bZeit = 0
GUIDelete($hZeitGUI)
Exit
EndFunc
Wenn ich mit dem Zeiten Umrechner 1 Millisekunde umrechne in Millisekunden müsste ja eigentlich soviel herauskommen wie man davor eingegeben hat. Es kommen aber nur 96% des zuvor angegebenen Werts heraus. Ich hab das jetzt so um die 10 mal selbst nachgerechnet und eigentlich müsste es funktionieren. Tut es aber nicht.
Hat vllt. jemand ne Lösung dafür?
PS: Ja viele von den Includes sind unnötig die werden aber im Moment vom Hauptskript benötigt. (Dieser Skriptteil soll wenn er funktioniert dann in die HauptGUI integriert werden.)
Edit: Kann es sein das die Fehler durch Fehler in der BigNum.au3 entstehen.
Wenn man z.B. 1000 Ms in Minuten und wieder in Ms umrechnet:
1000 / 1000 / 60 = 1/60 = 0,01666666666 (periodisch)
Doch da gibt die BigNum.au3 0.16 aus wodurch diese Fehler entstehen.
Edit2: Problem ist gelöst indem ich alles erstmal in Ms umrechne statt in Min.