BCMath Problem / Exponentialdarstellung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • BCMath Problem / Exponentialdarstellung

    Hi,

    ich habe ein ziemlich schwerwiegendes Problem und bin derzeit noch auf keine Lösung gestoßen. Ich arbeite viel mit Floats und bekomme zB zwei Werte aus der Datenbank, die ich mit floatval() umwandle.

    Soweit funktioniert das ja auch ganz ordentlich:

    PHP-Code:
    $num1 floatval("100000");
    $num2 floatval("1200000");
    var_dump($num1); // float(1.0E+5)
    var_dump($num2); // float(1.2E+6) 
    Jetzt würde ich gerne die beiden Zahlen vergleichen, was ich aufgrund der nötigen Genauigkeit mit BCMath mache, also der Funktion bccomp():

    PHP-Code:
    var_dump(bccomp($num1$num22)); // int(0) -> falsch
    var_dump(bccomp(intval($num1), intval($num2), 2)); // int(-1) -> richtig 
    Nachdem ich ja nicht weiß, ob es sich bei $num1 oder $num2 um ein Integer handelt würde ich gerne auf Floatbasis bleiben, aber anscheinend versteht bccomp hier die Exponentialdarstellung nicht.

    Irgendwelche Ideen, wie ich ihm das beibringen kann, oder wie ich die Exponentialdarstellung umrechnen kann?

  • #2
    Ok, nach bisschen Weitersuchen bin ich auf die Lösung gestoßen, bei den Kommentaren im PHP Manual.

    http://www.php.net/manual/en/function.bccomp.php

    Ich verwende jetzt folgende Funktion, durch die ich die Parameter von bccomp vorher durchgebe, wenn es sich um eine Exponentialdarstellung handelt:

    PHP-Code:
    /**
     * Rechnet float von Exponentialdarstellung (zB 1.5e4) in string um
     *
     * @param float $exp
     * @return string
     */
    public function exp2str($exp) {
        if(
    stripos($exp"e") === false)
            return 
    $exp;
        list(
    $mantissa$exponent) = spliti("e"$exp);
        list(
    $int$dec) = split("\."$mantissa);
        
    bcscale($dec);
        return 
    bcmul($mantissabcpow("10"$exponent));

    Thread kann geschlossen werden oder so.

    Kommentar

    Lädt...
    X