Fehler wenn ich round benutze



  • 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