2016-04-10 17 views
0

Ich möchte 3000 für all diese Zahlen:Wie man eine Ziffernrunde macht?

40000.3 - 40101 - 48000.8 - 49901 

Ich möchte 20 für all diese Zahlen:

21 - 25.2 - 29 

3001 - 3500 - 3999 

ich 40000 für all diese Zahlen wollen Es gibt zwei PHP-Funktionen für m Ake eine Ziffer rund (floor und round) Aber keiner von ihnen don't act exactly what I need.

Hinweis: Ich weiß nicht, meine Nummer enthält wie viele Ziffern. Wenn es sich ändert, ändert es sich.

Gibt es einen Ansatz dafür?

+1

Am einfachsten in meinem Kopf, zählen Sie die Strlen (String-Länge), und nehmen Sie dann die erste Zahl und stellen Sie sicher, über die Zeichenfolge Länge, dass es die richtige Anzahl von Nullen bekommt. –

Antwort

3

Es gibt "viele" Möglichkeiten, dies zu erreichen. Eine davon ist das:

<?php 

echo roundNumber(29)."<br>"; 
echo roundNumber(590)."<br>"; 
echo roundNumber(3670)."<br>"; 
echo roundNumber(49589)."<br>"; 

function roundNumber($number) 
{ 
    $digitCount = floor(log10($number)) ; 
    $base10  = pow(10, $digitCount); 
    return floor($number/$base10) * $base10; 
} 
?> 

Der Ausgang ist dies:

20 
500 
3000 
40000 
+0

Ihre Begrüßung :-) –

1

Dies funktioniert für alle keine. von Ziffern. Versuchen Sie folgendes:

$input = 25.45; 

if (strpos($input, ".") !== FALSE) { 
    $num = explode('.', $input); 
    $len = strlen($num[0]); 
    $input = $num[0]; 
} else { 
    $len = strlen($input); 
} 

$nearest_zeroes = str_repeat("0", $len-1); 

$nearest_round = '1'.$nearest_zeroes; 

echo floor($input/$nearest_round) * $nearest_round; 

Die Idee ist, wenn Sie rund um eine 4-stellige nein, sagen 3999, sollte $ nearest_round sein 1000.

Für 39990 (5-stellig), $ nearest_round = 10000.

Für 25 (2 Ziffern), $ nearest_round = 10.

Und so weiter.

Also ist die Idee, $ nearest_round dynamisch basierend auf der Nr zu generieren. von Ziffern von $ input.

Hoffe, das hilft.

+0

Ihre Lösung funktioniert nicht für Float-Nummern https://3v4l.org/Z9AqT – stack

+0

Ich habe die notwendigen Änderungen für die dezimale Eingabe vorgenommen. Bitte schau es dir an. –

0

PHP ermöglicht negative Präzision für runde wie mit: round(3993,-3);

Output: 3000

n round(1111.1111,n) 
== ================== 
3 1111.111 
2 1111.11 
1 1111.1 
0 1111 
-1 1110 
-2 1100 
-3 1000 

W3S about round

+0

Ich bezweifle, dass 'Runde (3993, -3) == 3000' – fusion3k

+0

Falsch https://3v4l.org/cWfn3 – stack