Geld als Foat oder doch ehr als Int

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey,
    Ich habe zurzeit mal eine frage wegen dem Geld System.


    Es geht darum das Geld als Float: also 52.84$ zu machen oder einfach als Int. 52$.
    Weil das Problem ist dass beim Addieren/Subtrahieren/Multiplizieren/Dividieren bei der Float manchmal ungenaue dinge rauskommen.
    Gibt es eine möglichkeit das zu ändern oder wäre ein Int besser.


    Oder doch einfach 2 Int nehmen für Euro und Cent ?

  • Was genau ist da einfacher als mit einen Float ?
    Man kann doch ein Float genauso + , - , / , * nehmen und muss es da lediglich mit einem Wert machen statt mit 2 Integers.
    Auch spart man sich damit das Umrechnen( Cent -> €) wenn man mehr als 100 Cent zum Beispiel im Integer 1 hat. (ist jetzt kein Aufwand klar, aber Float macht das Automatisch.)


    Genauso Geld abfragen sind lediglich mit einer Abfrage möglich bei Float. ( if(Wert >= 34.50)
    Bei Int müsstest du ggf. Nach dem € Wert und Cent wert fragen.


    Und anzeigen lässt sich das ganze Flexibel mit "%.2f". (2f = 2 Stellen, 3 ..... nach dem Komma)
    Ich bin zwar schon lange raus aus SAMP doch sehe ich(wenn ich mich nicht irre) nicht das 2 Integers besser als 1 Float sind bei diesen zumindest.

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • Ja das weiß ich @Dog:


    Aber ich bin der meinung dass es bei Float Werten bei + - * / ein bisschen immer ein bisschen höher oder kam mir nur das so vor ?




    Code
    Tanki[playerid][t_tankp] = floatadd(Tanki[playerid][t_tankp], floatmul(0.01, bizInfo[Tanki[playerid][t_tanki]][biz_dieselp]));

    Da ist es z.b bei 1L dass ich z.b 14.52$ pro Liter einstelle und bei 14:68 oder sowas Lande obwohl ich genau 1L habe.

  • Beitrag von reaL. ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Hier ein bsp


    Ich gebe beim Geld setzen 76.34 ein und es kommt


    Code
    Du hast dein Geld auf 76.33$ gesetzt.


    Code
    Der Print: [14:09:04] 55.51
  • In SetPlayerMoney setzt du %d.%d.
    Also kein Float sondern Integer (jaja %d ihr schlaumeier, ist egal jetzt)


    76.34 im Integer sind auch 76.33 wenn es Float ist. Denn hier wird gerundet, ab 5 wird aufgerundet, unter 5 wird runtergerundet. 2 Klasse Grundschule.


    Für die falschen Werte bist du also selbst schuld.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von Kaliber ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Ach keine Lust https://github.com/compuphase/pawn/blob/master/doc/Floating_Point_Support.pdf ().
  • Ja das meine ich ja, deswegen meinte ich ob man das ändern kann oder ob man es nur durch Euro und Cent Varriable machen kann am besten.


    @Talykos:
    Das mit dem aufrunden weiß ich.
    Aber das beim %d da will ich ja nur die 76.34 Splitten damit ich einmal die 76 habe und einmal 34 habe.


    @Kaliber:
    Also was muss ich verändern ?
    Verstehe das nicht so Ganz ;)

  • In anderen Sprachen macht es Sinn hier double/float Werte zu nehmen.


    In Pawn meiner Ansicht nach nicht.


    Es treten einfach zu starke Rundungsfehler auf, die man nicht so leicht beheben kann.


    Ich empfehle dir daher wirklich 2 Integer zu nehmen.


    //Edit:


    PS: Gibt dafür bereits auch schon fertige Systeme: https://forum.sa-mp.com/showthread.php?t=276588


    Einfach mal googlen :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • @Kaliber:
    Genau das ist das was ich gemeint habe.
    Deswegen habe ich Ja gefragt :)



    Eine frage ich habe es nun als Varriable und beim Tanken ein Problem.
    Ich geben pro Aufruf des Tanktimers 0.01 zum Tankhinzu muss also den Preis /100 Rechnen aber das geht nicht.
    Habe es im Beispiel mit 125$ gemacht als "Dieselp" und muss 1.25l Tanken um auf 125$ zu kommen aber eigentlich muss doch bei 1L 125$ sein oder nicht ?


    Code
    Tanki[playerid][t_tankp] += bizInfo[Tanki[playerid][t_tanki]][biz_dieselp]/100;