Fahrzeug aus Datenbankladen Problem

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
  • Guten Tag,


    Wenn ich die Positionen der Cars aus der Datenbank lese, sind sie ja noch ein String.
    Wenn ich sie dann mit floatstr in eine Float konvertiere, verändert sich die Zahl.


    Beispielsweise hab ich mir den String und den konvertierten String werte ausgeben lassen.


    Datenbank Einträge:
    X = 1134.621
    Y = 13.4
    Z = 180.0


    printf("%s | %s | %s",vx,vy,vz);
    printf("%f | %f | %f",floatstr(vx),floatstr(vy),floatstr(vz));


    Ausgegeben wird:
    1134.621 | 13.4 | 180.0
    1134.620971 | 13.399999 | 180.000000


    Hier mein kompletter Stock:

    Spoiler anzeigen
    stock LoadVehicleFromDatabase(playerid,fahrzeugNumber)
    {
    new query[512];
    new vid;

    format(query,sizeof(query),"SELECT * FROM `fahrzeuge` WHERE `name`='%s'",sInfo[playerid][name]);
    new DBResult:result = db_query(Database,query);

    for(new i = 1; i<fahrzeugNumber;i++)
    {
    db_next_row(result);
    }

    new modelid,vx[30],vy[30],vz[30],rotation[30],color1,color2;

    db_get_field_assoc(result,"modelid",query,3);
    modelid = strval(query);

    db_get_field_assoc(result,"x",vx,30);

    db_get_field_assoc(result,"y",vy,30);

    db_get_field_assoc(result,"z",vz,30);

    db_get_field_assoc(result,"rotation",rotation,30);

    db_get_field_assoc(result,"color1",query,3);
    color1 = strval(query);

    db_get_field_assoc(result,"color2",query,3);
    color2 = strval(query);

    printf("%s | %s | %s",vx,vy,vz);
    printf("%f | %f | %f",floatstr(vx),floatstr(vy),floatstr(vz));

    vid = CreateVehicle(modelid,floatstr(vx),floatstr(vy),floatstr(vz),floatstr(rotation),color1,color2,0);
    db_free_result(result);
    return vid;
    }



    MfG JumperKenny :)

  • Das ist nichts ungewöhnliches JumperKenny.


    Zitat

    1134.621 | 13.4 | 180.0
    1134.620971 | 13.399999 | 180.000000


    Ob 1134.621 oder 1134.620971 , 13.4 oder 13.399999 macht am Ende von der Position keinen Unterschied. Das sind in der Theorie nur mm die dort nicht exakt sind. Du kriegst es aber auch nicht exakter. Liegt nämlich daran wie eine Gleitkommazahl gespeichert wird.



    printf("%s | %s | %s",vx,vy,vz);
    printf("%.2f | %.2f | %.2f",floatstr(vx),floatstr(vy),floatstr(vz));
    So lässt du auf 2 Nachkommastellen Runden. Eventuell hilft dir das zumindest bei der Ausgabe etwas. Das oben genannte Problem besteht aber immernoch.