PHP – Ermitteln Sie die Länge der Ziffern in einer Zahl

Lesezeit: 3 Minuten

Benutzer-Avatar
Übergröße

Ich möchte fragen, wie ich die Länge der Ziffern in einer Ganzzahl erhalten kann. Zum Beispiel:

$num = 245354;
$numlength = mb_strlen($num);

$numlength sollte in diesem Beispiel 6 sein. Irgendwie schaffe ich es nicht zum Laufen?

Vielen Dank

BEARBEITEN: Der obige Beispielcode –^ und die entsprechende Methode mb_strlen(); funktioniert prima.

  • Wie funktioniert es nicht? Welche Ergebnisse erhalten Sie?

    – John Conde

    10. Februar 2015 um 14:13 Uhr

  • Anstatt viele Lösungen zu geben, hat jemand eine Idee zu “Warum DIESER Code nicht funktioniert?”. Weil der Code funktionieren sollte.

    – Debflav

    10. Februar 2015 um 14:23 Uhr

  • Der gepostete Code funktioniert wie ein Zauber!

    – axiak

    10. Februar 2015 um 14:23 Uhr


Vielleicht:

$num = 245354;
$numlength = strlen((string)$num);

  • Eine bessere Lösung ist die Verwendung von log(), dann müssen Sie es nicht in eine Zeichenfolge umwandeln.

    – Robert

    10. Februar 2015 um 14:37 Uhr

  • Mit mathematischen Funktionen wie log() ist für mich nicht lesbar. Ich glaube, dass Programmierer ! = Mathematiker

    – böseReiko

    18. Oktober 2017 um 8:12 Uhr

  • Diese Lösung funktioniert nicht für eine größere Anzahl. Testen Sie mit jeder Zahl, die mehr als 19 Ziffern hat.

    – Maciek Kemnitz

    11. Juli 2019 um 8:55 Uhr

  • scheitern mit $n = 0156;

    – Paketüberfluss

    2. August 2021 um 16:08 Uhr

Benutzer-Avatar
Robert

Die akzeptierte Antwort funktioniert nicht mit den großen Zahlen. Der bessere Weg, um die Länge einer beliebigen Zahl zu berechnen, ist der Aufruf floor(log10($num) + 1) mit einem Scheck für 0.

$num = 12357;
echo $num !== 0 ? floor(log10($num) + 1) : 1; // prints 5

Es hat mehrere Vorteile. Es ist schneller, Sie müssen keine Typen umwandeln, es funktioniert mit großen Zahlen, es funktioniert mit verschiedenen Zahlensystemen wie bin, hex, oct.

Die Gleichung macht den Logarithmus mit der Basis 10, macht dann den Boden daraus und addiert 1.

Diese Lösung kann auf der Basis unabhängig arbeiten. Wenn Sie also die Länge von Binär- oder Hexadezimalzahlen berechnen möchten, ändern Sie einfach die Basis des Logarithmus.

Arbeitsgeige

  • Ich denke, Sie müssen ein if for setzen 0; es verursacht -INF in PHP7.

    – MAChitgarha

    30. Juni 2018 um 9:31 Uhr

  • was würde es verursachen? Ich habe es gerade mit PHP7 überprüft und es funktioniert.

    – Robert

    30. Juni 2018 um 13:02 Uhr

  • Ich sehe jetzt, dass ich dich nicht verstanden habe, ich werde die Antwort bearbeiten, danke

    – Robert

    30. Juni 2018 um 22:04 Uhr

  • Der dritte Ausdruck im ternären Operator wäre 1, nicht 0; denn 0 hat 1 Ziffer!

    – MAChitgarha

    1. Juli 2018 um 14:08 Uhr

  • Dies sollte die akzeptierte Antwort sein, da die derzeit akzeptierte Antwort nicht mit großen Zahlen funktioniert

    – Luu Hoang Bac

    11. Oktober 2019 um 8:53 Uhr

Die akzeptierte Lösung stellt ein Problem dar, wenn negative Zahlen ausgewertet werden.

Es funktioniert mit einer positiven Zahl:

$num = 245354;
$numlength = strlen((string)$num);
// Result: 6

Aber bei einer negativen Zahl wird das (-) zur Zählung hinzugefügt:

$num = -245354;
$numlength = strlen((string)$num);
// Result: 7

Schnelle Problemumgehung:

$num = -245354;
$numlength = strlen((string)abs($num));
// Result: 6

  • scheitern mit $n = 0156;

    – Paketüberfluss

    2. August 2021 um 16:09 Uhr

Eleganter Weg 🙂

ceil(log10($num));

Sie könnten auch etwas grundlegende Mathematik verwenden!

$digits = (int)(log($num,10)+1) 

<?php
  $num = 123;
  $num2 = 1234;
  $num3 = 12345;

  function digits($num){
    return (int) (log($num, 10) + 1);
  }

  echo "\n $num: " . digits($num);  // 123: 3
  echo "\n $num2:" . digits($num2); // 1234: 4
  echo "\n $num3:" . digits($num3); // 12345: 5 
  echo "\n";

Eine andere Möglichkeit, die Länge einer Zahl in Ziffern zu ermitteln, besteht darin, den ganzzahligen Teil der Zahl durch 10 zu teilen, bis er zu 0 wird.

Beispiel:

2021/10 = 202.1 
202/10 = 20.2 
20/10 = 2 
2/10 = 0.2

Code:

function numberGetLength($number) {
     $count = 0;
     while (intval($number) > 0) {
        $number = intval($number) / 10;
        $count += 1;
     }
     return $count
}

Benutzer-Avatar
Jamie Ciocco

Verwenden Sie einfach eine Version von (int)(log($num,10)+1) schlägt bei 10, 100, 1000 usw. fehl. Es zählt die Zahl 10 als 1 Ziffer, 100 als zwei Ziffern usw. Es schlägt auch bei 0 oder einer beliebigen negativen Zahl fehl.

Wenn Sie Mathematik verwenden müssen (und die Zahl nicht negativ ist), verwenden Sie:

$numlength = (int)(log($num+1, 10)+1);

Oder für eine mathematische Lösung, die die Ziffern in positiven ODER negativen Zahlen zählt:

$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Aber die strlen-Lösung ist in PHP genauso schnell.

1050880cookie-checkPHP – Ermitteln Sie die Länge der Ziffern in einer Zahl

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy