Hallo liebe AutoIt-Freunde,
hab ein etwas komplexeres problem.
habe für meine arbeit ein programm entworfen das meinen kunden bei der auswahl einer meiner produkte hilft. hierbei übernimmt es lässtige rechenschritte jedoch habe ich probleme mit der rundung...
folgendes:
ich habe mehrere Produkte => Produkt 1, Produkt 2 usw
jedes Produkt setzt sich aus 4 verschiedenen Grundstoffen zusammen. nennen wir sie der Einfachheit halber a, b, c, d
jdes produkt wird anders gemischt, zB produkt 1 braucht 2 x material a, 3 x material b, 5 x material c und 1 x material d
meine kunden kommen und sagen sie haben eine bestimmte anzahl an a, b, c und d und wollen nun 20% von produkt 1, 40% von produkt 2 usw (insgesammt immer 100%)
hab das dann mal so geschrieben:
Spoiler anzeigen
$a_kosten_produkt1 = 3 ; kosten produkt eins von material "a"
$a_kosten_produkt1 = 2 ; " " " " " "b"
$a_kosten_produkt1 = 5 ; " " " " " "c"
$a_kosten_produkt1 = 1 ; " " " " " "d"
If GUICtrlRead($Produkt1) = $GUI_CHECKED Then ;wenn der haken bei checkbox "$Produkt1" gesetzt wurde dann..
$produkt1_a_ges = Floor($a_aviable / $produkt1_kosten_a) ; errechne wie viele produkte1 von material a hergestellt werden könnten und rundet auf die nächste Ganzzahl, die kleiner oder gleich dem angegebenen Wert ist
$produkt1_b_ges = Floor($b_aviable/ $produkt1_kosten_b) ; " " " " " " " b " " " " "
$produkt1_c_ges = Floor($c_aviable / $produkt1_kosten_c) ; " " " " " " " c " " " " "
$produkt1_d_ges = Floor($d_aviable / $produkt1_kosten_d) ; " " " " " " " d " " " " "
$stringload_produkt1 = StringSplit($produkt1_a_ges & "," & $produkt1_b_ges & "," & $produkt1_c_ges & "," & $produkt1_a_ges, ",", 2) ; die ausgerechneten werte werden in einen string gesetzt bei der ein komma das trennzeichen ist
$nummberMin_produkt1 = _MathEx_Min($stringload_produkt1) ; ermittelt den kleinsten wert der 4 ausgerechneten zahlen (das produkt kann immer nur fertig gestellt wenn alle materialien vorhanden sind kleinste zahl ist somit die max. zahl an produkten1
$Produkt1_end = Floor($nummberMin_produkt1 * $prozent_1_is / 100) ; max anzahl an produkten1 mal die prozentzahl die der user angegeben hat die von diesem produkt hergestellt werden sollen durch 100 = prozentuale mänge an produkten1
$Produkt1_end_a = $Produkt1_end * $a_kosten_produkt1 ; anzahl an produkten1 mal materialkosten a für produkt1 = material a gesammt benötigt
$Produkt1_end_b = $Produkt1_end * $b_kosten_produkt1 ; " " " " " " b " " " " b " " "
$Produkt1_end_c = $Produkt1_end * $c_kosten_produkt1 ; " " " " " " c " " " " c " " "
$Produkt1_end_d = $Produkt1_end * $d_kosten_produkt1 ; " " " " " " d " " " " d " " "
$Produkt1_end_ges = $Produkt1_end_a + $produkt1_end_b + $produkt1_end_c + $produkt1_end_d ; gesammt material a + gesammt material b + gesammt material c + gesammt material d = gesammtmaterialien
EndIf
das programm funktioniert und stimmt soweit schon nur entsteht durch das ständige abrunden rundungsfehler.
durch eine größere auswahl an produkten wird der rundungsfehler von der anzahl der ausgewählten produkten größer und größer und die restmaterialien sind dann so viel das man aus denen nochmals produkte herstellen könnte
ich hoffe mir kann überhaut noch jemand folgen.. hat jemand eine idee wie man die rundungsfehler vermeiden könnte bzw wie man hinterher die übrig gebliebenen materialien mit einer gewissen toleranz in ein produkt noch aufteilen könnte?
WENN ETWAS UNKLAR IST (WEIL ES JA WIRKLICH EIN WENIG KOMPLEX IST) DER KANN GERN NOCHMAL FRAGEN.
wäre sehr sehr schön und ich wäre unheimlich dankbar wenn mir da jemand helfen könnte
viele grüße Inferior
EDIT:
was mir noch so einfällt.
meine Variante ist sicher nicht die einfachste und ich bin mir sicher das es auch einfacher geht.
im moment steht mir zwar die funktionalität im Vordergrund jedoch wenn jemand eine andere Vorgehensweise hat mit dem er besseren überblick hat und das rundungsproblem in den griff bekommt würde ich auch nicht nein sagen
was ich sagen will: mein script ist nicht bindend