Seite 1 von 1

bcmul operand als Variable?

Verfasst: 01.02.2014 18:39
von rox²³
Keine ahnung ob ich zu blöd bin finde keine vernünftige Lösung.

Problem:

Code: Alles auswählen

$num_float = 651912917.06405027;
$multiplikator = 100000000;

$num1 = intval(bcmul((string)$num_float, $multiplikator)); 
Ergbnis: 65191291706405000

Mache ich aber:

Code: Alles auswählen

$num1 = intval(bcmul('651912917.06405027', $multiplikator));
Korrekt: 65191291706405027

Habe aber die Werte immer in einer Variable stehen also kann ich nur das ganze in Variablen Form übergeben.

Irgend jemand eine Idee? :roll:

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 19:10
von Miriam
"string" macht aus Deinem $numfloat 651912917.06405 und nicht 651912917.06405027.

Aber das hättest Du auch gern selbst herausfinden können... bei der Menge Code.

Aber: Dieser Code muß nicht auf allen Maschinen funktionieren. Bei manchen kam auch 2147483647 als Ergebnis heraus kommen.

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 19:24
von rox²³
hmm ja stimmt strval tut das gleiche.
Git es eine Möglichkeit das zu umgehen?

Edit: ich arbeite mit einer 64 bit Maschine

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 19:30
von Miriam
rox²³ hat geschrieben:...Edit: ich arbeite mit einer 64 bit Maschine
Ich auch, aber PHP ist bei mir nur 32bit compiliert.



Der Code sollte so klappen:

Code: Alles auswählen

$num1 = intval(bcmul($num_float, $multiplikator)); 

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 19:41
von rox²³
Leider tut er das nicht gleiches Ergebnis wie mit String()
Richtig wird es erst wenn ich den Wert direkt Eintrage ohne Variable.
Da ich aber die Werte aus einem Daemon sowie MongoDB bekomme muss ich den via Variable übergeben.

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 20:22
von Miriam
Du könntest $num_float aufteilen:
$num_int = intval($num_float); als integer Teil und dann
$dec_place = $num_float % $num_int; als Nachkommastelle feststellen /speichern.

Beides jeweils mit $multiplikator multiplizieren und dann addieren.

Viel Glück.

Re: bcmul operand als Variable?

Verfasst: 01.02.2014 22:23
von rox²³
ich machs jetzt mit einer einfachen intval() die abweichungen sind sehr gering und treten erst bei 2-stelligen Million Transaktionen auf die eh sehr selten sind.
Bei der Ausgabe werde ich dann einfach max 3 oder 4 Nachkommastellen ausgeben dann sollte dies garnicht ins Gewicht fallen.

Danke für deine Hilfe ;)

Re: bcmul operand als Variable?

Verfasst: 02.02.2014 17:37
von cYbercOsmOnauT
Eine Frage zum Verständnis: Warum wandelst Du eine Fließkommazahl vor einer mathematischen Operation in String um?

Re: bcmul operand als Variable?

Verfasst: 02.02.2014 20:00
von rox²³
Weils so vorgesehen ist und die Float sonst abgeschitten wird.

Code: Alles auswählen

string bcmul ( string $left_operand , string $right_operand [, int $scale ] )

Re: bcmul operand als Variable?

Verfasst: 03.02.2014 12:08
von cYbercOsmOnauT
Die Wege des Her... äh.. des PHP sind unergründlich :D