2017-02-13 5 views
2

Ich lese einige Daten aus einer CSV-Datei. Jede Zeile in der Datei hat einen Gleitkommawert.Korrigieren Sie die Float-Werte

  • .123: beginnend mit einer Periode, also brauche ich, bevor Sie eine Null hinzufügen diese Werte können entweder.
  • 1,23: mit einem Trennzeichen Komma ',' anstelle von Punkt, also muss ich das ändern.
  • 1.2e3 mit einem exponentiellen Format, also muss ich es in Dezimalformat umwandeln.

Ich kann nicht die Funktion number_format, weil ich nicht die Anzahl der Dezimalstellen festlegen können (die Float-Zahlen haben keine feste Länge des Dezimalteil und wir wollen, dass sie nehmen, wie sie sind keine Daten zu verlieren).

Hier ist was ich bisher versucht habe; Ich baute zwei Funktionen, wobei die erste die Schwimmer filtert, der zweite korrigiert sie, wenn der Filter false zurück:

function validateFloat($float){ 
    if(!filter_var($float,FILTER_VALIDATE_FLOAT,array('flags' => FILTER_FLAG_ALLOW_FRACTION))){ 
    return false; 
    } 

} 

function correctFloat($float){ 
    if (validateFloat($float)==false){ 
    $number = number_format($float,null,'.'); 
    str_replace($number,'',$line); 
    } 
} 

Ich weiß nicht, wie die correctFloat Funktion zu bauen. Irgendwelche Vorschläge ? Bin dankbar.

Antwort

2

Ihre Funktion kann prüfen, ob ein Komma und bekommen die richtige deliminator dann auf jedem anderen Fall verwenden floarval

function change_format($value){ 
    if(is_string($value)){ 
     //has to be a string if using ',' 
     $value= str_replace(",",".",$value); 
    } 
    return floatval($value); 
} 

echo change_format(.123) ."<br>"; 
echo change_format("1,23") ."<br>"; 
echo change_format("1.2e3"); 

Ausgänge: „“

0.123 
1.23 
1200 
+0

cool, was ist, wenn es mit beginnt ? – Somar

+0

floatval pads es. Benutze das Update, das ich gerade falsch geschrieben habe "$ value" viel ... – nerdlyist

+0

Das ist fantastisch! Danke. – Somar

Verwandte Themen