2017-03-06 4 views
2

Ich möchte Preise in PHPAufrunden Preis in PHP

z. Ich habe den Preis £74.31 Ich möchte auf den nächstgelegenen 74.35 oder wenn über £74.36 dann £74.40 und die Dezimalzahlen Ich möchte immer mit 5 und 0 enden.

Zum Beispiel

£74.31 would be round up to £74.35 
£74.32 would be round up to £74.35 
£74.33 would be round up to £74.35 
£74.34 would be round up to £74.35 
£74.35 would be round up to £74.35 

£74.36 would be round up to £74.40 
£74.37 would be round up to £74.40 
£74.38 would be round up to £74.40 
£74.39 would be round up to £74.40 
£74.40 would be round up to £74.40 

ich versuchte Preise zu aufrunden mit dem unter

round(($price * $rate) * 2, 1)/2; 
+0

Würde 'ceil ($ number * 20)/20;' funktionieren für das, was Sie versuchen zu tun? Hinweis: _sehr_ begrenzte Tests. – Jhecht

Antwort

0

Verwendung php floor() und ceil() und round() Funktion nach Ihren erfordern

+0

keiner wird in dem Fall arbeiten, was er will: - https://eval.in/748477 –

+0

ich weiß, aber er muss substr zu entfernen Zeichen und Konvertierungswert in float und diese Funktion muss –

1

Sie können auch mit dieser Logik versuchen

<?php 
    $x = 74.31; 
    $number = $x*100; 
    if($number % 5){ 
     $number = $number + 5 - ($number % 5); 
    }else{ 
     $number = $number - ($number % 5); 
    } 
    $number /=100; 
    echo number_format((float)$number, 2, '.', ''); 
?> 

Live-Demo: https://eval.in/748595

+0

Dank, nice Logik Sache . –

+0

@SakthibalanA funktioniert nicht in diesen Fällen: -https: //eval.in/748654 Und https://eval.in/748662. muss 74,50 und 75 –

1

Hoffentlich macht Sinn, aber wenn es nicht ein paar schnellen Hintergrund tut:

Den round($number * 2)/2 Sie Werke geschrieben, weil es zwei Hälften in jedem Ganzen. Wenn Sie zu Vierteln runden wollten, würden Sie round($number * 4)/4 verwenden, und Fünftel wäre round($number * 5)/5. usw.

Da es so aussieht, als ob Sie auf das nächste Nickel runden möchten, gibt es 20 Nickel in einem Dollar. Das Problem ist, dass es bereit ist, sich selbst auf und ab zu bewegen. Das gleiche passiert mit ceil(), aber es wird nur nach oben bewegt, was zu sein scheint, was Sie wollen.

function round_to_nickel($item, $decimals=false){ 
    $num = ceil($item * 20)/20; 
    return ($decimals) ? number_format($num, (int)$decimals) : $num; 
} 

Hoffe es hilft!

+1

sein das ist nett +1. können Sie versuchen, es zwei Dezimalstellen zu machen. Dann wird es perfekt. es gibt eine Ziffer nur nach dem Dezimal –

+1

Danke @anant! – Jhecht