2016-03-31 5 views
1

Ich versuche, für diese nur ganze Zahl von String zu erhalten i filter_var in phpImmer nur ganze Zahl von Zeichenfolge in php: kann nicht die Float-Werte erhalten richtig

Hier bin mit meinem Code

$str="Your base price is 456"; 
echo filter_var($str,FILTER_SANITIZE_NUMBER_INT); 

Wenn die Zeichenfolge jedoch einen Fließkommawert enthält, gibt filter_var die Ganzzahl ohne den Fließkommawert zurück.

Eg; 
$str="Your base price is 45.57"; 
echo filter_var(currencyConvert($currency,$results[0]->base_price),FILTER_SANITIZE_NUMBER_INT); 

wird diese ganze Zahl als 4557 Echo, aber ich brauche den Wert als gleich der Zeichenfolge.

dh es sollte 45.57 sein, aber ich werde es bekommen, wie 4557

Ist eine Möglichkeit, diese als richtig Float-Wert zu erhalten?

+0

Was genau ist Ihr Ziel? Möchten Sie es als Fließkommawert drucken? Oder eine ganze Zahl? –

+0

Als Fließkommawert drucken –

+0

Haben Sie 'FILTER_SANITIZE_NUMBER_FLOAT' versucht? Im Allgemeinen ist es nicht ratsam, INT-Funktionen für Nicht-Ganzzahlen zu verwenden, und dies ist einer von vielen solchen Fällen. – Vegard

Antwort

2

Versuchen FILTER_SANITIZE_NUMBER_FLOAT verwenden, aber Sie müssen die richtige Flagge dh FILTER_FLAG_ALLOW_FRACTION

$str="Your base price is 45.57"; 
echo filter_var($str,FILTER_SANITIZE_NUMBER_INT); 
print_r("\n"); 
echo filter_var($str,FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 
print_r("\n"); 

verwenden Dieser druckt

4557 
45.57 
+0

es funktioniert Danke :) –

+0

Keine Sorge, froh, dass es geholfen hat. – Harry

0

In dieser Codezeile:

echo filter_var($str,FILTER_SANITIZE_NUMBER_INT); Sie FILTER_SANITIZE_NUMBER_INT verwendet haben ganze Zahl erhalten einen String bilden. Um die Fließkommazahl von einer Zeichenkette zu erhalten, können Sie FILTER_VALIDATE_FLOAT verwenden. Für weitere Informationen es hier ansehen: http://www.w3schools.com/php/filter_validate_float.asp

0

Verwenden Sie den folgenden Code wird es Ihnen helfen.

$str="Your base price is 45.6"; 
preg_match_all('!\d+(?:\.\d+)?!', $str, $matches); 
$floats = array_map('floatval', $matches[0]); 
print_r($floats); 

Oder

echo filter_var($str,FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 
+0

Verwenden Sie einen der obigen Codes, um Ihr Problem zu lösen. @Blessan Kurien – RJParikh

1

Try this:

$str = "Your base price is 456"; 
echo preg_replace("/[^0-9\.]/", '', $str); // Prints 456 
echo "<br/>"; 
$str = "Your base price is 45.57"; 
echo preg_replace("/[^0-9\.]/", '', $str); // Prints 45.57 

Hoffnung, das hilft.

0

Try This:

$str = "Your base price is 45.57"; 
$float_val=(float) filter_var($str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION) ; 
echo $float_val; 
Verwandte Themen