Anzahl der Vorkommastellen eines Floats ermitteln (Thema: PHP Beispiele)

Mögliche Verfahren und Beispiele, um die Stellen vor dem Komma eines Float-Werts zu bestimmten

1. Einleitung

Wie bei der Berechnung der Nachkommastellen, gibt es auch für die Ermittlung der Anzahl der Vorkommastellen keine feste Funktion in PHP. Nachfolgend werden daher zwei mögliche Implementierungen vorgestellt. Eine arbeitet mit einer String-Umwandlung der Zahl, die andere mit mathematischen Operationen. Im Vergleich zur Nachkommastellenberechnung sind beide Funktionen genauer.

2. Berechnung über String-Umwandlung

In der nachfolgenden Funktion „countDigits()” wird ein übergebener Float-Wert zunächst in einen String umgewandelt. Anschließend wird die Position des letzten Punktes in der Zahl ermittelt. Ist keiner vorhanden, dann hat die Zahl keine Nachkommastellen und es kann direkt die Länge des Strings zurückgegeben werden. Andernfalls entspricht die Anzahl der Vorkommastellen der Position des Punktes im String (Position 0 = 0 Vorkommastellen, Position 1 = 1 Vorkommastelle usw.).

PHP-Code
<?php
	$numbers = array(1, 5, 999, 1.0, 1.424000000000, 3.141, 0.123456789, 1e10, 13134.4324234, 2389.1111111111111, 99999999.2222222222);
	
	function countDigits($number) {
		$str = strval($number);
		$pos = strrpos($number, '.');
		return ($pos===false ? strlen($str) : $pos);
	}
	
	foreach ($numbers as $number) {
		echo $number.": ".countDigits($number)."\n";
	}
?>

HTML-Code: Ausgabe
1: 1
5: 1
999: 3
1: 1
1.424: 1
3.141: 1
0.123456789: 1
10000000000: 11
13134.4324234: 5
2389.1111111111: 4
99999999.222222: 8


3. Mathematische Berechnung über log10

Die zweite mögliche Implementierung arbeitet mit der Funktion log10($number). Diese gibt zurück, wie oft 10 mit sich selbst multipliziert werden muss, um die übergebene Zahl zu erhalten. Wird eine Zehnerpotenz übergeben, dann entspricht das Ergebnis von log10 der Anzahl der Nullen der übergebenen Zahl. Wird stattdessen eine Zahl übergeben, die ungleich einer Zehnerpotenz ist, dann gibt log10 eine ungerade Zahl zurück. Rundet man diese Zahl ab, so ergibt sich die Anzahl der Nullen der nächstniedrigeren Zehnerpotenz. Diese Anzahl plus eins entspricht der Anzahl der Vorkommastellen der übergebenen Zahl.

Einige beispielhafte Rückgaben von log10 lauten etwa:

PHP-Code
<?php
	var_dump(log10(0)); // -INF
	var_dump(log10(0.5)); // -0.30102999566398
	var_dump(log10(1)); // 0
	var_dump(log10(11)); // 1.0413926851582
	var_dump(log10(123)); // 2.0899051114394
?>

HTML-Code: Ausgabe
float(-INF)
float(-0.30102999566398)
float(0)
float(1.0413926851582)
float(2.0899051114394)


Die Funktion countDigits, auf Basis von log10:

PHP-Code
<?php
	$numbers = array(1, 5, 999, 1.0, 1.424000000000, 3.141, 0.123456789, 1e10, 13134.4324234, 2389.1111111111111, 99999999.2222222222);
	
	function countDigits($number) {
		// nur log fuer positive Zahl berechnen
		$number = abs($number);
		if ($number < 1 && $number >= 0) {
			// fuer Zahlen zwischen 0 und 1 ergibt log hier unpassende Werte, daher
			// wird dafuer gezielt 1 zurueckgegeben
			return 1;
		} else {
			// Anzahl der Vorkommastellen der Anzahl der Nullen
			// der nächstniedrigeren Zehnerpotenz plus eins
			return 1 + (int)(log10($number));
		}
	}
	
	foreach ($numbers as $number) {
		echo $number.": ".countDigits($number)."\n";
	}
?>

HTML-Code: Ausgabe
1: 1
5: 1
999: 3
1: 1
1.424: 1
3.141: 1
0.123456789: 1
10000000000: 11
13134.4324234: 5
2389.1111111111: 4
99999999.222222: 8


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK