ich lese eine webseite aus und bekomme manchmal auch werte wie 08.
diese werte brauche ich auch, aber autoit macht mit int und number 8 draus. wie kann ich ds verhindern?
zahl 08 darf nicht als 8 ausgegeben werden.... wie geht das?
-
- [ gelöst ]
-
Maximus1 -
29. Dezember 2010 um 08:54 -
Geschlossen -
Erledigt
-
-
Wenn die Zahlen immer 2-stellig sind dann so:
Spoiler anzeigen
[autoit]MsgBox(0,"",StringFormat("%02d", 8))
[/autoit]
Ansonsten darfst du die ausgelesenen Zahlen welche als String vorliegen nicht in Zahlen umwandeln da Zahlenformate eben keine führende Null zulassen.
Oder du musst dir halt per StringLen() irgendwo mitspeichern wieviel Stellen die Zahl hatte. -
schau dir das mal bitte an.
ich lese einen preis aus und arbeite mit dem nachkommawert.
damit das alles funktioniert muss ich das aber bisher als int oder number behandeln.wenn ich es nun als string belasse, kann ich damit nicht rechnen, oder zumindest weiss ich nicht wie das geht. bin halt noch anfänger.
[autoit]
das ist der bisherige code um den nachkommawert zu lesen und zu verarbeiten.;~ nachkomma------------------------------------------------------------------------after the ,
[/autoit][autoit][/autoit][autoit]
$pleft2= $gebpreis &","
$pright2="</strong>"$source2 = _StringBetween($sText, $pleft2,$pright2)
[/autoit]
if Not @error Then;~ preisabzug------------------------------------------------------------------------to rebate
$w = Number($source2[0])
If Number($source2[0]) ==Number(00) Then
$gebpreis = $gebpreis -1 ;-1 bevore the ,
$w =Number(99) ;and 99 after the ,
Else
$w = $w -1
EndIf
$end = $gebpreis &',' & $w
Else
MsgBox(262192,"Warnung","Konnte keinen Preis auslesen!!!")
$end = InputBox("Preiseingabe","Bitte den gewünschten Preis eingeben."&@LF &Number($source1[1]&Chr(44)Number($source2[0]))
EndIf -
- Offizieller Beitrag
Hallo,
meinst du sowas:
[autoit]$szFloat = "5,06"
[/autoit][autoit][/autoit][autoit]$szFloat = StringReplace($szFloat, ",", ".")
[/autoit][autoit][/autoit][autoit]
$fNK = Round(Number($szFloat) - Int($szFloat), 2)MsgBox(0,"Nachkommawert", $fNK)
[/autoit] -
Kannst du noch bitte mal ein Minimalbeispiel mit einer entsprechend gefüllten $sText-Variablen mit eintragen?
Und dann sagen was gemacht werden soll und was am Ende raus kommen soll?
Bevor wir uns daran machen hier dieses Skript anzupassen könnte ich mir vorstellen das wir direkt mit den ganzen Zahlen rechnen können.
Spontan hätte ich gesagt das du Probleme hast weil Number mit "," getrennten Werten nur die Vorkomma-Werte übernimmt.
Das hängt einfach damit zusammen das im Englischen der Punkt als Trenner genommen wird und man da einfach nur mit einem StringReplace das Komma austauschen muss.
Vielleicht denk ich da aber falsch - in jedem Fall wäre es schön wenn du ein funktionierendes Minimalbeispiel postest damit wir wissen wozu (wichtig!).Edit: Na da hat Bernd dir ja dafür schon ein Beispiel gemacht
[autoit]
Bernd
kürzer :$fNK = Round(Mod($szFloat,1), 2)
[/autoit] -
dann gebe ich euch doch lieber das ganze projekt.
dann könnt ihr euch ein bild der ganzen sache machen.einfach eine sache aussuchen die man verkaufen will und wenn nach dem zustand gefragt wird unten auf übertragen klicken.
-
Sorry aber das ist kein funktionierendes Beispiel.
Und was du machen willst ist mir auch dadurch nicht klar.
Füll einfach die $sText mit einem passenden Beispielstring und sage was du bezwecken willst aber lass uns bitte nicht durch dieses Projekt durchraten. -
da ist zwar nichts mit raten, aber ok.
im folgenden html code sind 2 preise. das script schaut welcher niedriger ist und zieht davon 1cent ab.
das funktioniert bisher nur wenn der preis im nachkommabereich nicht zuerst eine 0 hat.wie ich da nun einen beispielcode basteln soll ist mir ein rätsel.
Code
Alles anzeigen<tr> <th class="label" scope="row" valign="top"> <span> Preis bei Amazon:</span> </th> <td class="smallnegative"> <strong> EUR 9,80</strong> </td> </tr> <tr> <th class="label" scope="row" valign="top"> <span> Niedrigstes Angebot:</span> </th> <td class="smallnegative"> <strong> EUR 0,64</strong> </td> </tr>
-
Klar ist da was mit raten - starten kann ich dein Skript nicht - es kommt ne Fehlermeldung.
Jetzt wird es aber endlich mal bisschen konkreter.
Willst du 1 Cent abziehen dann mal als Minimalbeispiel dein Minimalbeispiel angepasst:1 Cent abziehen - kommentiertes Minimalbeispiel
[autoit]$pleft2= "EUR "
[/autoit] [autoit][/autoit] [autoit]
$pright2="</strong>"; Zahl auslesen
[/autoit] [autoit][/autoit] [autoit]
$source2 = _StringBetween($sText, $pleft2,$pright2); Komma durch Punkt ersetzen
[/autoit] [autoit][/autoit] [autoit]
$source2[0] = StringReplace($source2[0], ",", "."); String in Zahl umwandeln
[/autoit] [autoit][/autoit] [autoit]
$source2[0] = Number($source2[0]); 1 cent abziehen:
[/autoit] [autoit][/autoit] [autoit]
$source2[0] -= 0.01; Zahl mit 2 Nachkommastellen ausgeben
[/autoit]
MsgBox(0,"", StringFormat($source2[0], "%02d", $source2[0]))
Wie du nun die 2 Preise vergleichst überlasse ich erstmal dir. -
... falls ich das richtig verstehe:
[autoit]; entweder >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[/autoit]
$VorKomma = "99"
$NachKomma = "07"
$Abzug = 0.01
$Endpreis = StringReplace(Number($VorKomma & "." & $NachKomma) - $Abzug, ".", ",")
MsgBox(0, "Endpreis", $Endpreis)
; oder >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$Preis = "99,00"
$Abzug = 0.03
$Endpreis = StringReplace(Number(StringReplace($Preis, ",", ".")) - $Abzug, ".", "," )
MsgBox(0, "Endpreis", $Endpreis) -
- Offizieller Beitrag
Oder einfach mal mit RegEx:
Spoiler anzeigen
[autoit]$string = _
[/autoit] [autoit][/autoit] [autoit]
' <tr>' & _
' <th class="label" scope="row" valign="top">' & _
' <span>' & _
' Preis bei Amazon:</span>' & _
' </th>' & _
' <td class="smallnegative">' & _
' <strong>' & _
' EUR 9,80</strong>' & _
' </td>' & _
' </tr>' & _
' <tr>' & _
' <th class="label" scope="row" valign="top">' & _
' <span>' & _
' Niedrigstes Angebot:</span>' & _
' </th>' & _
' <td class="smallnegative">' & _
' <strong>' & _
' EUR 0,64</strong>' & _
' </td>' & _
' </tr>'$aPreise = StringRegExp($string, "(?:EUR )(\d+),(\d{1,2})", 3)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('niedrigster Preis -1 Cent: ' & ( $aPreise[UBound($aPreise) -2] & '.' & $aPreise[UBound($aPreise) -1] ) -0.01 & @CRLF)
[/autoit] -
- Offizieller Beitrag
in deinem StringFormat hat sich wohl ein Bug eingeschlichen
[autoit]; Zahl mit 2 Nachkommastellen ausgeben
[/autoit]
MsgBox(0,"", StringFormat("%.2f", $source2[0])) -
Vollkommen richtig - ist natürlich falsch so wie es bei mir steht (war noch von vorhin wo nur der Nachkommateil dastand)
Umso mehr macht es mir Gedanken warum damit dennoch die richtige Ausgabe erscheint... -
- Offizieller Beitrag
Der 1. Parameter in deinem Stringformat ist $source2[0], und da da kein Formatstring enthalten ist wird der Rest ignoriert.
-
Ach na klar - nicht bloß die Formatierung war falsch sondern auch die Parameter...
-
hey super, ich habe damit doch schon einiges an code eingespart und eigentlich das hinbekommen, was ich ursprünglich machen wollte.
ich danke dir für die wirklich tolle hilfe.an regex wage ich mich erstmal nicht dran. ich versuche erstmal das kleine 1x1 in den kopf zu bekommen.