Typumwandlung



  • hi kann mir jemand sagen, wie ich die Fehlermeldung wegbekomme, bzw wie man das richtig macht

    CString sA = "";
    CString sB = "";
    sA = (sB/2)*100;

    Fehlermeldung:
    binary '/' : 'class CString' does not define this operator or a conversion to a type acceptable to the predefined operator

    Besten Dank 🙂



  • Hallo,

    du versuchst gerade mit einer Zeichenkette zu Rechnen .... 😉

    Die frage ist warum du einen String durch 2 teilen willst und dann mal 100?

    kleiner Tipp am rande

    CString sA;
    int i;
    
    sA.Format("%d", ((i/2)*100));
    

    so oder so ähnlich



  • "du versuchst gerade mit einer Zeichenkette zu Rechnen "

    ja ich weiß 🙂

    "Die frage ist warum du einen String durch 2 teilen willst und dann mal 100?"

    die Frage ist berechtigt *g*, ansatt der 2 kommt auch später was anderes rein, wollt nur schaun ob die Formel klappt (Anfänger) 😉

    okay vielen dank, werd gleich ausprobieren 🙂



  • aber anstatt dem i sollte sB(String) stehen
    Aber ich darf ´ja nicht sB/2 schreiben
    Wie geht das dann, das 😕 versteh ich nicht



  • Dann mach es doch so:

    sA.Format("%d", ((atoi(sB)/2)*100));
    

    Und ganz allgemein: Damit genauer gerechnet wird, sollte man immer erst malnehmen bevor man teilt - sonst kann es leicht vorkommen, dass das Ergebnis falsche ist (wegen Rundungsfehlern).

    Also besser:

    sA.Format("%d", ((atoi(sB)*100)/2));
    

    🙂



  • aah, okay atoi hab ich irgendwo hier schon mal gelesen
    Suppi, klappt wunderbar, merci

    danke euch 🙂



  • ach nochwas

    sA.Format("%d", ((atoi(sB)/2)*100));
    bzw
    sA.Format("%d", ((atoi(sB)*100)/2));

    wenn jetzt z.B sB 5 ist, --> dann ist sA 200
    Was muss man denn machen ,dass genau gerechnet wird mit Rest

    danke



  • Hallo

    also im Moment hab ich das, und es wird auf eine Nachkommastelle gerundet

    int iB = atoi(sB);
    float fA = float((iB / 2) * 100);
    sA.Format("%.1f",fA);
    

    Wenn nun sB 7 ist, dass ist sA 300

    Wie bekomm ich das hin ,dass aber sA richtigerweise 350 ist?

    Vielen Dank 🙂



  • Du musst zuerst nach float casten und dann teilen

    int iB = atoi(sB);
    float fA = (((float) iB) / 2.0) * 100.0);
    sA.Format("%.1f",fA);
    


  • hi Airdamn

    perfekt, vielen danke für deine Hilfe 🙂

    grüße

    An der Stelle:
    float fA = (((float) iB) / 2.0) * 100.0);

    bekomm ich ein WARNING
    warning C4244: 'initializing' : conversion from 'double' to 'float', possible loss of data

    ist das egal?



  • Geht dafür nicht atof statt atoi und den Formatstring ersetzen?
    Also so:

    sA.Format("%.lf", ((atof(sB)*100)/2));
    


  • hi
    probiers gleich mal aus 🙂

    Perfekt, jetzt sind die WARNINGS weg

    Besten dank 🙂 👍


Anmelden zum Antworten