double to bool



  • Hallo!

    Wie konventiere ich am besten double ins integer? Gibt es da eine funktion, die ich nicht finden kann? Oder soll ich mir eine selber schreiben?
    Die double-Werte sind immer 0.0 oder 1.0 also habe ich da keinen Datenverlust.

    Danke, Krys



  • einfach zuweisen



  • Das kannst Du doch einfach zuweisen!?

    double dWert; // Dein Double halt
    int iWert = dWert;  // Hier haste dann Deinen Integer. Bei bool verhält es sich analog
    // dabei hast du dann eine Warnung.....
    
    double dWert;
    int iWert = (int) dWert; // das ist noch schöner und ohne Warnung.
    
    double dWert;
    int iWert = static_cast <int> (dWert);  // das ist wohl die edelste Variante mit dem static_cast. so findest du es auch leicht wieder.
    

    Warum nimmst Du dann nicht gleich einen Integer-Wert, wenn Du immer 0 oder 1 hast.

    Oder halt nen bool.

    [ Dieser Beitrag wurde am 27.05.2003 um 10:57 Uhr von Frenzy editiert. ]



  • Hallo!

    Ich habe ein bisschen Stress und deswegen habe ich mich verschrieben:-). Es geht natürlich ohne Probleme double zu int zu casten. Ich möchte aber double zu boolean casten oder konvertieren. Beim Casten bringt der Compiler logischerweise Warnungen.
    Wie kann ich das am bessten umsetzen?

    bool flag;
    double number = 1.00;

    flag = (bool)number; // dies bring die Warnungen

    Sorry und danke noch einmal

    Gruß, Krys



  • warum willst du den des machen?
    deklariere dein bool einfach gleich als double.



  • Ich hab da ein Modell was ich ansteuere(soll nicht verändert werden), dass nur Werte hat, die als double definiert sind. Und ich brauche für meine Zwecke ein bool! Deswegen will ich das casten.
    Wenn dies so wäre, würde ich schon so machen:-)

    Gruß,Krys



  • bool ist immer 0 oder 1.
    Double dagegen hat ein viel höheren wertebereich.
    Wenn du also andere Daten als 0 oder 1 hast, wirst du
    das entsprechend abfangen müssen...

    Devil



  • bool DoubleToBool(double d) {
        if(static_cast<int>(d) == 1) {
            return true;
        }
        return false;
    }
    


  • Also entweder machste ne Abfrage:

    if( dWert != 0.0 )
    {
      bWert = TRUE;
    }
    else
    {
      bWert = FALSE;
    }
    

    Ansonsten ist die Warnung vernachlässigbar denke ich. Die Nachkommastellen sind ja immer '.0'



  • Also danke schön. Ich wollte mich vergewissern, ob es keine entsprechende Funktion gibt.

    Krys



  • also so viel ich weiß kannst du das einfach zuweisen aber du mußt aufpassen weil bool kann nur true oder false sein d.h. du mußt genau wissen was in deinem double wert steht. wenn da 3.75 weiß dein programm eher weniger ob true oder false.



  • wie er oben schrieb, gibt bekommt er ja nur 1.0 oder 0.0 zurück

    aber da 0.0 bei den meisten compilern nicht zwangsweise als false interpretiert wird, kann das auch als true interpretiert werden.

    am besten ne if abfrage machen.



  • Original erstellt von Frenzy:
    **aber da 0.0 bei den meisten compilern nicht zwangsweise als false
    **

    doch, 0 wird immer in false umgewandelt, false immer in 0. alles andere wird in true gewandelt, und true immer in 1.



  • Bist Du Dir da sicher?

    Ich meine in einer CT war mal ein Artikel über Fließkommaarithmetik. Und ein Kollege sagte mir auch das es nicht zwangsweise von jedem Compiler so interpretiert wird.



  • Ich denke eigentlich, dass es mit Fließkommaarithmetik nichts zu tun hat, also dass es egal ist, ob ich 0.0 oder 0 nehme (und 0 ist auf jeden Fall immer false, die Stelle im Standard kann ich bei Bedarf raussuchen).

    4.12  Boolean conversions                                  [conv.bool]
    
    1 An rvalue of arithmetic, enumeration, pointer, or  pointer  to  member
      type  can  be converted to an rvalue of type bool.  A zero value, null
      pointer value, or null member pointer value is converted to false; any
      other value is converted to true.
    

    [ Dieser Beitrag wurde am 27.05.2003 um 12:22 Uhr von Bashar editiert. ]


Anmelden zum Antworten