PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Euro Interface - keine Wert Angabe



spacehunter
10.07.2009, 07:23
Hallo,
habe eine Euro Seite und habe das VMS ohne Klamm Anbindung:
So, nun folgendes Problem so ich bald die Krise bekomme.

Ich lade Banner per Interface von einem oder auch dem anderen Euro Sponsor hinein.
Nur es werden mit keine Vergütungs Werte angezeit, immer nur 0,00.

Wenn ich die Variabele $pay = $ausgabe[$pos+5]; alleine anzeigen lassen, dann sehe ich die Werte, aber wenn etwas umgerechnet werden muss, dann geht es nicht, dann wird mit immer nur 0 angezeigt.

Die Ausgabe so einer Variabele ist ja nich wie bei losen, sondern zum beispiel: 0.0005

Wenn ich nun hergehe, und folgendes versuche:


$verguetung = $pay / 100 * 40;

Dann bekomme ich immer einen Fehler ---> E-0

Wie bekomme ich das am besten gebacken.
Danke für jede jede Hilfe.

DANKE

jpwfour
10.07.2009, 08:41
Welches Interface(system)?

Normalerweise kann man in den Einstellungen zum IF immer einen Umrechnungswert eingeben, bei dir wäre das ja dann 1.

Dann kann es natürlich noch sein, dass die Datenbank(spalte) für € Werte im Milli-Cent Bereich zu "ungenau" ist, also bspw. auf double(xx,2) steht, was ja nur 2 Stellen nach dem Komma genau ist, müsstest du dann ändern auf bspw. double(xx,8).

Oder im Interface findet irgendwo eine Rundung statt, das glaube ich aber kaum.

spacehunter
10.07.2009, 09:23
Hallo,
bin nahe am Wahnsinn, denn verstehe das nicht.
folgendes, die Beträge werden wie folgt ausgelesen:

$pay = $ausgabe[$pos+5];

wenn ich echo ''.$pay.''; habe dann wird alles auch angezeigt, nur umgerechnet wird hier null, egal wie ich es anstelle und mache.

Bei diesem hier kommt nur null raus:
$pay_betreiber = round($pay*$ifdata['umrechnung'],2);
$pay_user = round($pay_betreiber - (($pay*$ifdata['umrechnung']) / 100 * $ifdata['eigen']),2);

Das geht überhaut nicht

Hier wenn ich das versuche, zum testen:

$z1= $pay;
$z2= $z1 / 2;
echo $z2;

Dann kommt folgendes raus: 5E-05

Ist ja voll krass, und ich Programmiere nicht erst seit gestern, oder sehe ich den Wald vor lauter Bäume nicht?

Gruß und Danke

jpwfour
10.07.2009, 10:15
round(X,2) rundet ja die zahl X auf 2 Nachkommastellen, so wie ich das mit den € Beträgen aber sehe, brauchst du da ja mehr als 2, bspw. 5

Also 0.01 gerunet auf 2 ergibt 0.01
0.009 auf 2 sollte 0.01 ergeben
0.0005 auf 2 ergibt aber dann schon 0.00 (!)

Da round() einen float Wert zurückgibt, darf PHP den bei der Ausgabe (echo,...) auch in Exponetialschreibweise ausgeben, also

5E-05 = 5 * 10^-5 = 0.00005


Also sollte das Ändern des 2. round() Parameters schon mal "intern" Abhilfe schaffen, dann könnte aber das mit der Datenbank auch noch gut zum Problem werden, da also auch die Genauigkeit höher stellen.

(VMS1 ist halt eher auf Klammlose ausgelegt)

spacehunter
10.07.2009, 11:08
Erst mal Danke für Deine Antwort:

Im Prinzip sollte es ja nicht so schwer sein, aber irgendwo hänge ich noch:

Mein Versuch:

$pay_user = round(($ausgabe[$pos+5] / 100 * $ifdata['eigen']),6);


aber geht nicht, wieder 5E-05

ich glaube ich mache da schon zu lange rum und finde deshalb die lösung nicht.

Aber danke für jeden tipp und hilfe

VMS1
10.07.2009, 12:24
Hi,

jetzt verstehe ich auch den Hintergrund des Support-Tickets im SHop. Also zunächst einmal den Typ der Spalten in der DB ändern, wo die Vergütung gespeichert wird:


ALTER TABLE `vms12_gebuchte_werbung` CHANGE `verdienst` `verdienst` DOUBLE( 11, 10 ) NOT NULL DEFAULT '0.00',
CHANGE `preis` `preis` DOUBLE( 11, 10 ) NOT NULL DEFAULT '0.00'

Damit können dann auch Euro-Kleinstbeträge gespeichert werden (bis zu 10 Stellen hinterm Komma).

Wie jpwfour schon richtig geschrieben hat, muß in den Interfaces die Rundung geändert wird, da das VMS ja auf virtuelle Währungen ausgelegt ist (Virtual Monetary System) :


$pay_betreiber = round($pay*$ifdata['umrechnung'],10);
$pay_user = round($pay_betreiber - (($pay*$ifdata['umrechnung']) / 100 * $ifdata['eigen']),10);


Eigentlich sollte der Exponential-Wert beim Eintragen in die Datenbank wieder zu einer Zahl werden. Habe ich zumindest noch nie Probleme mit gehabt, das PHP nicht damit rechnen könnte, bzw. das nicht in der DB gespeichert werden kann (wenigstens dann nicht, wenn der Typ der Spalte DOUBLE ist). Problematisch wird es höchstens, wenn man so einen Wert z.B. als Betrag in einer EF-Url von Klamm verwendet etc.
Sollte es wie auch immer, nicht funktionieren, dann unter den beiden Zeillen von oben Folgendes einfügen :


$pay_betreiber = number_format($pay_betreiber,10,'.','');
$pay_user = number_format($pay_user,10,'.','');

Sollte eigentlich Abhilfe schaffen.

Gruß
Marco

spacehunter
10.07.2009, 12:37
hey super, das hat super geklappt.
ich dachte ich werde schon wahnsinnig.

DANKE - DANKE - DANKE - DANKE - DANKE

daro75
02.08.2009, 16:36
hallo habe das selbe problem.
In welchen dateien muß den was geändert werden?
Habs ned verstanden