bcmul operand als Variable?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

bcmul operand als Variable?

Beitrag 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:
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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)); 
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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 ;)
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag von cYbercOsmOnauT »

Eine Frage zum Verständnis: Warum wandelst Du eine Fließkommazahl vor einer mathematischen Operation in String um?
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Benutzeravatar
rox²³
Mitglied
Beiträge: 347
Registriert: 24.07.2003 15:18
Wohnort: Schmölln
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag 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 ] )
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: bcmul operand als Variable?

Beitrag von cYbercOsmOnauT »

Die Wege des Her... äh.. des PHP sind unergründlich :D
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „Coding & Technik“