Runden - schwerer als erwartet

  • Hallo Leute!

    Ich bin noch ein Anfänger in Sachen PHP und mit PHP für Dummies ( :D ) habe ich versucht, einen Rechner für ein Spiel zu erfinden!

    Ich habe praktisch alles geschafft, nur ein kleines wichtiges Detail krieg ich nicht hin: Das Runden.

    Ich will es nicht auf bestimmte Nachkommastellen runden oder so, sondern auf 0.5!

    Also, 1, 1.5, 2, 2.5, 3, 3.5, usw.


    Trotz vielem Suchen in Web und fragen bei Bekannten, habe ich es nicht geschafft!

    [php:1:c5017c8346]<?
    $text = (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;
    round($text, 1);
    echo ("Die Grundpunktzahl beträgt gerundet: $text
    ");

    ?>[/php:1:c5017c8346]


    Wie ihr dem Quelltext entehmen könnt, habe ich es geschafft, die Zahl auf eine Nachkommastelle zu runden.

    Doch ich weiss, wie ich schon erwähnte, nicht, wie man es auf 0.5 rundet!

    Wäre für Hilfe enorm dankbar!


    Mit freundlichem Gruss,
    Valexus

  • deine sache ist mathematisch nicht definiert (denn was machst du z.b. wenn 2,3 rauskommt?), also wirds wohl kaum einen befehl dafür geben. das einzige was du machen kannst ist dass du die nachkommastelle anschaust und dann rundest. z.b.[php:1:448595210e]<?php
    if ($nachkommastelle >=3 && $nachkommastelle <=8) {
    $zahlneu = $vorkomastelle.",5";
    }
    # usw...
    ?>[/php:1:448595210e]


    /edit: wieso macht er mir aus & ein &amp; ? wie kann ich das abstellen?

    naja, @ gast auf jeden fall, dort wo &amp;&amp; steht, nur && hinschreiben.

  • Hi!

    Erstmals vielen Dank für die Hilfe!

    Ich habe nun versucht den PHP Code einzufügen, doch ich habe es nicht hinbekommen! :cry:

    Wie ich ja schon erwähnte, bin ich ein PHP Anfänger.

    Ich habe mehrere Methoden ausprobiert, usw. Doch nach längerem Versuchen bin ich leider immernoch nicht draufgekommen!

    Falls der Code allgemein formuliert war, konnte ich auch nicht viel daraus rausholen. Der Computer weiss ja nicht, dass $nachkommastelle die nachkommastelle ist, oder?


    Ich hänge mal meinen gesamten Script an, vielleicht kann mir dann jemand besser helfen! :(

  • Mist, scheint nicht geklappt zu haben, deshalb hier das ganze:

    [php:1:f0ad89b723]
    <?
    $text = (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;
    round($text, 1);
    if ($nachkommastelle >=3 && $nachkommastelle <=8) {
    $zahlneu = $vorkommastelle.",5";
    }
    echo ("Die Grundpunktzahl beträgt gerundet: $zahlneu $text
    ");
    echo ("Die Kampfpunktzahl beträgt gerundet: $schaden

    ");
    $total = (($text * 75) + ($schaden * 25)) / 100;
    round($total, 1);
    echo ("[b]Somit ist die gerundete Totalpunktzahl: $total ");
    ?>[/php:1:f0ad89b723]

  • probier esm la hiermit:

  • Ich betone nochmals, dass ich Anfänger bin und deshalb wenig mit euren Scripts anfangen kann, wenn ihr es mir in allgemeiner Form gibt. Wenn möglich, wäre es nett, wenn ihr es bereits zu meinem Script anpasst.


    Ich habs nun mal eingefügt, und falls es so aussehen sollte, klappt es nicht:

    [php:1:001731a05f]<?php
    $text = (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;
    echo runden(1.4);

    function runden( $eingabe )
    {
    $Wert=split( "\." , $eingabe);
    if ($Wert[1]>=5)
    {
    $Wert[1]=5;
    } else {
    $Wert[1]=0;
    }

    $ausgabe=$Wert[0].".".$Wert[1];
    $ausgabe=(float)$ausgabe;

    return $ausgabe;
    }
    echo ("Die Grundpunktzahl beträgt gerundet: $text
    ");
    echo ("Die Kampfpunktzahl beträgt gerundet: $schaden

    ");
    $total = (($text * 75) + ($schaden * 25)) / 100;
    round($total, 1);
    echo ("[b]Somit ist die gerundete Totalpunktzahl: $total ");
    ?>[/php:1:001731a05f]


    :!: EDIT :!:

    Habe mal deinen Script alleine abspielen lassen und folgendes rausgefunden:
    wenn ich 1.4 runden lasse, dann rundet er den fälschlicherweise auf 1 ab.
    Bei 1.8 auf 1.5.

  • Wenn ich dein script richtig interpretiere:

    dann müsste es so aussehn.

  • Ich weiss nicht, ob ich deine Frage richtig verstanden habe, aber so:

    1.75 bis 2.25 soll auf 2 gerundet werden.
    2.25 bis 2.75 auf 2.5.
    2.75 bis 3.25 auf 3.


    Und es werden nur positive Zahlen sein. Die kleinstmögliche Zahl ist 1.


    :!: EDIT :!:

    Dein neuer Script der rundet, das ist schon mal gut. Aber einen Wert von 2.675 rundet er statt 2.5 auf 3 hoch. Also immernoch nicht ganz korrekt.

  • Ok. dann solte das jetzt so funktionieren:


    finde ich zwar eien sehr merkwürdige Art zu runden, aber das ist ja dein ding.

  • Klappt bedauerlichsterweise immer noch nicht :(

    Er rundet es immernoch auf 3 hoch!


    Zitat

    nde ich zwar eien sehr merkwürdige Art zu runden, aber das ist ja dein ding.

    Vielleicht verstehen wir uns falsch? Ich will alle Zahlen, die ausgerechnet wurden, auf halbe runden lassen. also 1.9 zu 2. oder 1.7 runter auf 1.5.

    Einfach die zur näherliegenden halben oder ganzen Zahl.

  • 1.75 bis 2.25 soll auf 2 gerundet werden.
    2.25 bis 2.75 auf 2.5.
    2.75 bis 3.25 auf 3.

    sind gleich werte für unterschiedliche rundungen???????


    ich habe es:

    1.75 bis 2.24 soll 2
    2.25 bis 2.74 auf 2.5
    2.75 bis 3.25 auf 3

    gemacht!!!!

    sont drücke dich richtig aus.!!!1

  • Hier habe mir mal mühe gegeben und was gebastelt !!!

    erstmal der quelltext


    index.php
    [php:1:baa97e4c74]<html>
    <?
    //um den Quelltext nicht unnötig aufzublähen habe ich die Funktion in eine extra Datei geschrieben ;)
    //diese wird mit include eingefügt !!!!!
    include("func/runden.php");
    ?>
    <head>
    <title></title>
    </head>

    <body>
    <?php

    $text = (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;

    //HIER AUF FUNKTION ZURÜCKGREIFEN NAME --> komisches_runden($variable)


    // ANFANG TEST<-------
    $text= "1,3";
    echo komisches_runden($text);

    echo "

    ";

    $text= "1,4";
    echo komisches_runden($text);

    echo "

    ";

    $text= "1,7";
    echo komisches_runden($text);

    echo "

    ";

    $text= "1,8";
    echo komisches_runden($text);
    // ENDE TEST<-------
    ?>
    </body>

    </html>
    [/php:1:baa97e4c74]

    so und jetzt

    im ordner func die runden.php

    [php:1:baa97e4c74]<?
    function komisches_runden($text){
    //ermitteln ob eine Nachkommazahl vorhanden ist
    $komma_position = strpos($text,",");

    //Nachkommazahl vorhanden == JA
    if(!empty($komma_position)){


    //Gesammtlänger der Zahl ermitteln
    $laenge_zahl = strlen($text);

    //Ganzzahl extrahieren
    $zahl=substr($text,0,$komma_position);

    //Nachkommazahl extrahieren
    $nachkomma = substr($text,$komma_position+1,$laenge_zahl);


    //Länge der Nachkommazahl ermitteln
    $nachkomma_laenge = strlen($nachkomma);


    //Wenn die Nachkommazahl länger ist als 1 Stelle
    if($nachkomma_laenge>1){

    //Divisor ermitteln damitt die nachkommazahl auf eine Ganzzahl und x Nachkommastellen umgewandelt wird
    // dient nur zum besseren Runden der Nachkommazahl
    $divisor ="1";
    for($i=1;$i < $nachkomma_laenge;$i++){
    $divisor .= "0";
    }

    //Runden der Nachkommazahl
    $nachkomma = round($nachkomma/$divisor);
    }

    //Wenn Nachkommazahl kleiner 4 ist wird nur die Ganzzahl gespeichert
    if($nachkomma < 4 ){
    $zahl_fertig=$zahl;
    }

    //Wenn Nachkommazahl größer 3 ist und kleiner 8 wird die Ganzzahl mit 0,5 gespeichert
    if($nachkomma > 3 && $nachkomma< 8 ){
    $zahl_fertig=$zahl . ",5";
    }

    //Wenn Nachkommazahl größer 7 ist wird die Ganzzahl um eins erhöht
    if($nachkomma > 7 ){
    $zahl_fertig=$zahl+1;
    }
    return $zahl_fertig;

    }
    else{
    return $text;
    }
    }

    ?>[/php:1:baa97e4c74]

    auch als download erhältlich !!! So jetzt habe ich aber nen knutscher auf meinen ungewaschenen Arsch verdient !!! LOL :wink:

  • Wow, vielen dank an alle!

    Ich habe nun mal den Script von ST-O Keule ausprobiert und er klappt!

    Ich habe nun das ganze dann in mein berechnung.php eingebaut und jetzt gibt es noch ein Problem.

    Im Beispiel von Keule schreibt er folgendes:

    [php:1:b7b0f5ed68]<?php
    $text= "1,3";
    echo komisches_runden($text);
    ?>[/php:1:b7b0f5ed68]

    Das wird korrekt gerundet!

    ABER in meinem Beispiel sieht es so aus:

    [php:1:b7b0f5ed68]<?php
    $text= (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;
    echo komisches_runden($text);
    ?>[/php:1:b7b0f5ed68]


    Die Zahlen für $tugend, $idee und $stil werden ja von der seite davor geliefert.
    Doch wenn ich nun die variable $text anzeigen will, rundet es nicht mehr, sondern zeigt einen Wert, wie zB 1.9 an.

    Sobald ich eine Zahl eingebe für "(($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;" zB "1,3" wird es korrekt gerundet.

    Weiss jemand weiter :?:

  • Valexus blickte um sich herum und blickte kritisch in die Gegend.
    Dann ging er in die Knie und schüttelte dabei vor Pein seinen Kopf. Mit geschlossenen Augen bückte er sich nach vorne und knutschte ST-O Keules ungewaschenen Arsch. "Danke...!" :D

  • Moin!

    Bevor das Script nun noch umfangreicher und damit auch komplizierter wird, möchte ich mich mal mit meiner Lösung einmischen.

    Das ganze ist doch nur einfache Mathematik:

    Code
    $text = (($tugend * 4) + ($idee * 3) + ($stil * 3)) / 10;
    $text = round($text*2)/2;

    that's all ....

    G.a.d.M.

    Ronald

    Edit: habs jetzt nicht getestet, müßte aber hinhauen - sonst noch mal melden.