zahl 08 darf nicht als 8 ausgegeben werden.... wie geht das?

  • 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?

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • 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.
    das ist der bisherige code um den nachkommawert zu lesen und zu verarbeiten.

    [autoit]

    ;~ nachkomma------------------------------------------------------------------------after the ,
    $pleft2= $gebpreis &","
    $pright2="</strong>"

    [/autoit][autoit][/autoit][autoit]

    $source2 = _StringBetween($sText, $pleft2,$pright2)
    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

    [/autoit]

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

    • Offizieller Beitrag

    Hallo,

    meinst du sowas:

    [autoit]

    $szFloat = "5,06"

    [/autoit][autoit][/autoit][autoit]

    $szFloat = StringReplace($szFloat, ",", ".")
    $fNK = Round(Number($szFloat) - Int($szFloat), 2)

    [/autoit][autoit][/autoit][autoit]

    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 :)
    Bernd
    kürzer :P :

    [autoit]

    $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.

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

    2 Mal editiert, zuletzt von Maximus1 (29. Dezember 2010 um 21:09)

  • 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.

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • 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 "
    $pright2="</strong>"

    [/autoit] [autoit][/autoit] [autoit]

    ; Zahl auslesen
    $source2 = _StringBetween($sText, $pleft2,$pright2)

    [/autoit] [autoit][/autoit] [autoit]

    ; Komma durch Punkt ersetzen
    $source2[0] = StringReplace($source2[0], ",", ".")

    [/autoit] [autoit][/autoit] [autoit]

    ; String in Zahl umwandeln
    $source2[0] = Number($source2[0])

    [/autoit] [autoit][/autoit] [autoit]

    ; 1 cent abziehen:
    $source2[0] -= 0.01

    [/autoit] [autoit][/autoit] [autoit]

    ; Zahl mit 2 Nachkommastellen ausgeben
    MsgBox(0,"", StringFormat($source2[0], "%02d", $source2[0]))

    [/autoit]


    Wie du nun die 2 Preise vergleichst überlasse ich erstmal dir.

  • ... falls ich das richtig verstehe:

    [autoit]

    ; entweder >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    $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)

    [/autoit]
    • Offizieller Beitrag

    Oder einfach mal mit RegEx:

    Spoiler anzeigen
    [autoit]

    $string = _
    ' <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>'

    [/autoit] [autoit][/autoit] [autoit]

    $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

    AspirinJunkie,

    in deinem StringFormat hat sich wohl ein Bug eingeschlichen ;)

    [autoit]

    ; Zahl mit 2 Nachkommastellen ausgeben
    MsgBox(0,"", StringFormat("%.2f", $source2[0]))

    [/autoit]
    • Offizieller Beitrag

    Der 1. Parameter in deinem Stringformat ist $source2[0], und da da kein Formatstring enthalten ist wird der Rest ignoriert.

  • 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.

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

    Einmal editiert, zuletzt von Maximus1 (29. Dezember 2010 um 12:54)