Float auf zwei Stellen runden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Naja , Ich habe das gerade mal probiert. Das Problem ist, wie Gleitkommazahlen verarbeiten werden.
    stock Float:irgendwas( Float:fValue , iNachkomma = 2 ) {
    new
    Float:fReturn,
    sString[16];
    format( sString , sizeof(sString) ,"%.*f", iNachkomma , fValue);
    fReturn = floatstr( sString );
    return fReturn;
    }

    Weil Float: ein Tag ist, musst du die Funktion erst deklarieren bevor du sie nutzt. Sonst gibt es Fehlermeldungen. Als public wäre es auch möglich, dann muss die Funktion aber per forward erst deklariert werden, bevor du sie nutzt.


    Im Prinzip funktioniert das so , ich zeig dir aber mal ein Fälle, wo es nicht richtig klappt. Das wirst du aber auch nicht beheben können:


    printf(" %f ", irgendwas( 1.23456789 , 3 ) ); // 1.23399 - nicht gewünschtes Ergebnis
    printf(" %.3f ", irgendwas( 1.23456789 , 3 ) ); // 1.233 - nicht gewünschtes Ergebnis
    printf(" %f ", irgendwas( 1.43500000 , 3 ) ); // 1.434 - nicht gewünschtes Ergebnis
    printf(" %f ", irgendwas( 1.12345678 , 3 ) ); // 1.123000
    printf(" %f ", 1.234 ); // 1.23399 - nicht gewünschtes Ergebnis

    WIe du siehst, klappt da etwas nicht. Da kannst du aber nichts gegen machen, liegt an der Verarbeiung von Gleitkommazahlen. Exakt wirst du es in vielen Fälle nicht bekommen.