2016-07-14 26 views
1

Ich habe ein Schwimmer, die Daten zurückgeben von einem cURL Anruf ist, dass ich um 0,25% multiplizieren möchten (gegen Gebühr) und dann Summe (addieren Gebühr Zwischensumme)Multiplikation eines Schwimmers, immer falsche Antwort (php)

Code:

var_dump(var_dump($obook['Bid']); 
echo number_format(($obook['Bid'] *= 0.0025) + $obook['Bid'], 8);); 

Ausgang:

float(0.01191616) 
0.00005958 

ich kann den prozentualen Betrag bekommen, aber es zu dem Wert Ihrer hinzufügen.

Wie berechne ich eine Gebühr und Summe, zu einem float?

also 0,01191616 * 0,0025 = $ Gebühr

$ Gebühr + 0,01191616 = $ new_grand_total

UPDATE: Dies ist nicht korrekt:

$commis = $obook['Bid'] *= 0.0025; 
var_dump(number_format($commis, 8)); 

Ausgang:

string(10) "0.00002976" 
+0

Warum verwenden Sie noch '* =' im Update? Verstehst du immer noch nicht den Unterschied zwischen '*' und '* ='? – Barmar

Antwort

1
$obook['Bid'] *= 0.0025 

bedeutet, die Variable mit 0.0025 zu multiplizieren und das Ergebnis dann wieder in $obook['Bid'] zu setzen. Wenn Sie dann $obook['Bid'] hinzufügen, verdoppeln Sie das Ergebnis.

Mit anderen Worten: Ihr Code entspricht:

$obook['Bid'] = $obook['Bid'] * 0.0025; 
echo number_format(2 * $obook['Bid'], 8); 

dieser Weil, du bist der ursprüngliche Wert von $obook['Bid'] zu verlieren, ist es nur mit der Gebühr ersetzt, und dann die Gebühr an sich.

Sie sollten *, nicht *= verwenden, wenn Sie die Variable nicht aktualisieren möchten.

$new_grand_total = $obook['Bid'] * 0.0025 + $obook['Bid']; 

Sie können auch High-School-Algebra zu erkennen, verwenden, dass x * y + x-x * (1+y) äquivalent ist, so können Sie tun:

$new_grand_total = $obook['bid'] * 1.0025; 
+0

dann spuckt es schlecht Mathe aus. 0,01190264 mal 0,0025 plus 0,01190264 entspricht 0,01193239 auf meinem Rechner. – dooode

+0

Woher bekommen Sie '0.01190264'? Der ursprüngliche Wert ist 0,01191616. Wenn Sie das mit "0,0025" multiplizieren, erhalten Sie '0,0000297904', und wenn Sie das verdoppeln, ist das Ergebnis' 0,00005958'. – Barmar

+0

@dooode Warum fügen Sie '0.01190264' hinzu? Hast du den Hauptpunkt der Antwort nicht verstanden, dass du das Ergebnis der Multiplikation hinzufügst, nicht den ursprünglichen Wert? – Barmar

0

diese stattdessen tun:

$obook['bid'] *= 1.0025 
+0

was ist mit der Zwischensumme zu summieren? Das gibt nur den Gebührenbetrag. – dooode

+0

es gibt nur die Gebühr, wenn Sie '0,0025' verwenden. Ich benutze '1.0025' – BeetleJuice

+0

bekommen die Gebühr ist kein Problem. Die Gebühr, die auf diese Zwischensumme "nach der Gebührenberechnung" hinzugefügt wird, ist mein Problem. – dooode