2017-11-14 4 views
0

Ich muss einige Produkte bestellen, die von Benutzern basierend auf ihrem Preis registriert sind.Konvertieren Sie Zeichenfolge in Nummer, achten Sie auf Punkte und Kommas für die Bestellung

Ich benutze WordPress und wenn der Benutzer ein Produkt anzeigt, bekomme ich das Feld über Eingabe = Text, dann wandle es mit einer Funktion um.

Leider ist das Feld, das die konvertierte Zahl erhält, auch ein Textfeld und ich kann das nicht ändern.

Also habe ich die gleiche Funktion verwendet, um die Zahl zu konvertieren, wenn ich die Posts loop und ihren Inhalt bekomme.

Soweit visuell, funktioniert es perfekt ... Aber wenn ich versuche, um den Preis zu bestellen ... Es wird durcheinander gebracht.

Hier wird die Funktion ich habe:

//convert the number wich is a string, to float 
function tofloat($num) { 
    $dotPos = strrpos($num, '.'); 
    $commaPos = strrpos($num, ','); 
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
     ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false); 
    if (!$sep) { 
     return floatval(preg_replace("/[^0-9]/", "", $num)); 
    } 

    return floatval(
     preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . ',' . 
     preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num))) 
    ); 
} 
$value = get_field('preco_anuncio'); 
$precoFinal = tofloat($value); 

Irgendwelche Ideen, wie man das lösen? Ich muss das "Visuelle" mit Punkten und Kommas erhalten. Wie: 3.567,00 €

Antwort

0

Ok, also habe ich es zur Arbeit gebracht. Ich weiß nicht, ob es der richtige Weg oder der beste Weg ist ... Aber es hat mein Problem gelöst und ich sehe kein Problem damit.

Hier ist, was ich getan habe:

  1. Die input ich habe, ist eine Texteingabe.

  2. Ich habe JavaScript verwendet, um es optisch eher wie ein Währungsfeld aussehen.

  3. Wenn in der Datenbank registrieren, ich wandeln es mit der Funktion toFloat, die ich geschrieben:

    function tofloat($num) { 
        $dotPos = strrpos($num, '.'); 
        $commaPos = strrpos($num, ','); 
        $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
        ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false); 
        if (!$sep) { 
         return floatval(preg_replace("/[^0-9]/", "", $num)); 
    } 
    
    return floatval(
        preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . ',' . 
        preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num))) 
    ); 
    } 
    
  4. Dann benutze ich die number_format() keine Punkte oder Leerzeichen zu entfernen:

    number_format ($ precoAd , 2, ',', '');

  5. Wenn ich den Wert wieder aus der Datenbank zu erhalten, gebe ich es wieder number_format() so wird es aussehen wie ich brauche:

    number_format; ($ value, 2, ' ''.')

Verwandte Themen