Fehler wenn ich round benutze


  • Administrator

    In math.h gibt es allerdings kein round. Das round kommt von irgendwo anders. Wie gesagt, dass musst du wissen. Hast du womöglich in einem Header ein round definiert und kein Body dazugesetzt?

    Grüssli



  • Ich hab nirgends round definiert, ich dachte das wär standard. Ich hab jetzt versucht eine von diesen rounds zu verwenden, aber da krieg ich immer nur 0 zurück! Auch meine eigene kleine round-funktion

    double round( double d )
    {
    	return floor( d + 0.5 );
    }
    

    liefert komischerweise immer nur 0 zurück. N plan warum?

    Edit: Daran kann's ja nicht liegen. Der fehler liegt vorher im Code



  • Die 0 kommt aus der Rechnung, hier der Code

    double recentPspVolume;
    
    recentPspVolume = (recentVolume/255)*53;
    

    Warum ist recentPspVolume immer 0?



  • Es ist zum Mäusemelken! Gebt euch das:

    int recentVolume;
    double recentPspVolume;
    char send_buffer[192];
    
    recentVolume = SendMessage(plugin.hwndParent, WM_WA_IPC, -666, IPC_SETVOLUME);	// Holt sich die Lautstärke von Winamp
    wsprintf(send_buffer, "Volume is now %i", recentVolume);
    MessageBox(plugin.hwndParent,send_buffer,"",MB_OK);				// MsgBox; Asugabe: "Volume is now 82"
    
    recentPspVolume = (recentVolume/255)*53;
    wsprintf(send_buffer, "PSP-volume is now %d", recentPspVolume);
    MessageBox(plugin.hwndParent,send_buffer,"",MB_OK);				// // MsgBox; Asugabe: "PSP-volume is now 0"
    

    Ich kapier's nicht


  • Administrator

    (int / int) * int = int 😉

    Schreib doch mal die Rechnung so:

    recentPspVolume = (recentVolume / 255.0) * 53.0;
    

    Das .0 bewirkt, dass die Zahl nicht als int, sondern als double angesehen wird. Wenn du sie als float möchtest, dann müsstest du folgendes machen:

    (recentVolume / 255.0f) * 53.0f;
    

    Das .0f bewirkt, dass die Zahl als float angesehen wird 😉

    Grüssli



  • double recentPspVolume = (static_cast<double>(recentVolume) / 255.0) * 53.0;
    

    ?



  • Super! Das hat mich schon mal nen entscheidenden Schritt weitergebracht! Danke!

    Aber ich krieg noch fehler:

    error C2065: 'static_cast': nichtdeklarierter Bezeichner
    error C2059: Syntaxfehler: 'Typ'

    😕



  • Hmm programmierst du in C oder was? Wenn ja dann ersetz static_cast<double>(recentVolume) durch (double)recentVolumn 😉



  • Hm, google hilft mir nicht wirklich weiter. Was genau ist der unteschied zwischen nem static_cast und nem einfachen typecast?

    Edit: Crosspost 😕



  • naja static_cast hast du unter C nicht zur verfügung ... da musst du nen C-Style-Cast nehmen ...

    double recentPspVolume = (((double)recentVolume) / 255.0) * 53.0;
    


  • Ok, danke für eure Hilfe. Eine letzte Frage noch (und ja, haut mich ruhig für mein Newbie-tum). Ich will das Double in eine char[256] Variable packen. Dafür mach ich

    wsprintf(send_buffer, "PSP-volume is now %lf", recentPspVolume);
    

    aber ich bekomm nur "PSP-volume is now f" raus. Wie stell ich's richtig an?



  • Auch mit

    wsprintf(send_buffer, "PSP-volume is now %.2f", recentPspVolume);

    und

    wsprintf(send_buffer, "PSP-volume is now %2.10f", recentPspVolume);

    nur

    "PSP-volume is now f"

    Ich versteh's nicht

    edit: Jetzt hab ich folgendes versucht:

    char *send_buffer;
    int pspVolumeDecPointPos, pspVolumeDecPointSign;
    
    recentPspVolume = round(13.6);
    
    send_buffer = _fcvt(recentPspVolume, 1, &pspVolumeDecPointPos, &pspVolumeDecPointSign);
    

    Und jetzt kackt er in der Laufzeit mit der Meldung "The variable 'send-buffer' is being used without being defined"


Anmelden zum Antworten