2012-03-30 4 views
1

Die Zahlen, die aus einer XML-Datei gezogen und dann einer Variablen zugewiesen werden, aber falsch ausgegeben werden. Ich bin mir nicht sicher, warum oder wie ich es umgehen soll. Ein Beispiel ist das.PHP round & ceiling Parsing von Daten nicht korrekt

$pricing_high = 1.15; 
echo $pricing_high; 

Dies zeigt offensichtlich 1,15. Aber wenn ich diese vergeben wie folgt:

$price = ceil($pricing_high/0.05) * 0.05; 
echo $price; 

Dies zeigt 2.

$price = round($pricing_high/0.05) * 0.05; 
echo $price; 

Dies zeigt 1.

Wie kann ich Zahlen bekommen richtig auf die nächsten 5 Cent aufrunden beim Passieren es so?

+0

Beide geben "1.15" aus. – MichaelRushton

Antwort

2

Ab PHP Dokumentation für Rund Funktion:

http://php.net/manual/en/function.round.php

Sie Präzision als zweiten Parameter angeben:

$pricing_high = 1.15; 
$price = round($pricing_high/0.05, 2) * 0.05; 
echo $price; 

Hinweis-Wert des zweiten Parameters 2

+0

Mit $ price = round arbeiten ($ pricing_high/5, 2) * 5; Wie kann ich es bekommen, um die 0s zu behalten? Zum Beispiel, anstatt 1 anzuzeigen, wird es 1,00 oder von 0,4 bis 0,40 anzeigen. –

+0

Nevermind Ich habe es :) $ price1 = sprintf ("% 01.2f", $ price); Danke für die Information! –

0

Als ceil() und floor() haben diese Genauigkeit nicht, Sie könnten Ihre Ergebnisse multiplizieren und danach teilen.

1

Ist 1.15 = 1 Dollar und 15 Cent? Wenn ja:

echo sprintf('%.2f', round($price/0.05) * 0.05); // Rounds to nearest 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Rounds up 

Tests:

$price = 1.13; 

echo sprintf('%.2f', round($price/0.05) * 0.05); // Outputs: 1.15 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Outputs: 1.15 

$price = 1.12; 

echo sprintf('%.2f', round($price/0.05) * 0.05); // Outputs: 1.10 
echo sprintf('%.2f', ceil($price/0.05) * 0.05); // Outputs: 1.15 

Wenn 1.15 = 1,15 Cent dann ersetzen 0.05 mit 5.