Pi Stellen ausgeben lassen

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Pi Stellen ausgeben lassen

    Moin Moin,

    ich habe vor, mal von Pi eine bestimmte Stelle, die man will ausgeben zu lassen.
    Da wollte ich mal Fragen, ob was möglich ist.
    Wenn ja wie?

    Weil ich habe schon mal herum geguckt, aber nichts sinnvolles gefunden.

    *Topic verschoben*
    Mit Freundlichen Grüßen
    AtomiX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    PHP-Quellcode

    1. <?php
    2. $eingabeNachkommastelle = 5;
    3. $index = $eingabeNachkommastelle + 1; // nullbasierend + ersten 2 Zeichen ausbleden, da es nur um Nachkommastellen geht
    4. $pi = number_format(pi(), 48);
    5. echo $pi . '<hr>';
    6. echo substr($pi, $index, 1);
    7. ?>


    sowas?

    Schau es dir mal an und frag, wenn du was nicht verstehst..


    LG, Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Ja an sich geht es schon.
    ich verstehe substr nicht.

    Und es wäre doch bestimmt möglich das auch so zu machen, dass man nur eine bestimmte Zahlenstelle von Pi ausgegeben bekommt? :D
    Mit Freundlichen Grüßen
    AtomiX

    AtomiX schrieb:

    dass man nur eine bestimmte Zahlenstelle von Pi ausgegeben bekommt?



    wie meinen?


    EDIT:

    substr steht für Substring, hat als Parameter einmal den eigentlichen String, einen Startindex und eine Länge.
    D.h. du übergibst dieser Funktion einen String, gibst einen Index an und ein Länge und bekommst davon den String zurück

    Bspw.: substr("vb-paradise", 3, 8);
    der String hier ist klar, an Index 3 ist (nullbasiert) das "p" -> dient der Funktion als Startindex. Und Länge 8, sprich wir bekommen "paradise" zurück.

    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    ​ich verstehe substr nicht

    Meine Fresse, PHP hat so ne gute Doku und du bist zu faul um 2 Wörter bei Google einzugeben: php.net/manual/de/function.substr.php

    PHP-Quellcode

    1. <?php
    2. $Text = "Hello World";
    3. # Siebtes Zeichen ausgeben (an Index 6 weil bei 0 zu zählen begonnen wird)
    4. echo substr($Text, 6, 1);
    5. # Zeilenumbruch
    6. echo "<br>";
    7. # Oder den String ab Index #6 3 Zeichen lang ausgeben
    8. echo substr($Text, 6, 3);
    9. ?>


    Ausgabe:

    Quellcode

    1. W
    2. Wor



    Link :thumbup:


    www.marius-gerum.de
    PHP lernen | Programmierung | Sonstiger Krempel
    Zum Blog | PHP lernen | GitHub | Gists | List of awesome

    Quellcode

    1. x =(int)(f * pow(10,i))
    2. o = x - (int)(x/10)*10 //int cast hier ist nur um deutlich zu machen, dass es eine Ganzzahldivision ist. Ist in den meisten Sprachen nicht nötig

    Die Idee hierbei ist ich verschiebe die Stelle die ich haben will durch Multiplikation an die Einerstelle(also vor dem Komma). Dann schneide ich alles nach dem Komma ab(int cast). Von diesem Ergebnis benötige ich dann nur noch den Einer d.h. ich muss alle Hunderter/Tausender/etc. entfernen, dies ist ebenfalls ganz einfach in dem man einen int mit einer Ganzzahlen division durch 10 teilt und anschließend wieder damit multipliziert ist das Ergebnis diesselbe Zahl wie der Input, bis auf dass die Einerstelle 0 ist. Nach anschließender Subtraktion bleibt logischerweiße nur noch die Einerstelle übrig.
    Beispiel:

    Quellcode

    1. f = 3.14159
    2. i = 3
    3. x = (int)(3.14159 * 1000) = (int)3141.59 = 3141
    4. o = 3141-(int)(3141 / 10)*10 = 3141-(int)(314.1)*10 = 3141-314*10 = 3141-3140=1

    Das gute dabei ist mit Index 0 bekommst du die Einerstelle(also 3 bei pi) und mit negativ Zahlen kannst du sogar die anderen Stellen vor dem Komma bekommen.

    Noch besser dabei ist, man kann das ganze über eine Schleife machen, wobei man dann immer auf das vorherige Ergebnis aufbauen kann, was das ganze ziemlich performant macht.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---