Doubles Beschneiden...



  • Hi,

    würde gerne doubles nach einer bestimmten Anzahl von Nachkommastellen einfach abschneiden.

    Hab's gemacht, wie hier beschrieben:
    http://www.c-plusplus.net/forum/viewtopic.php?t=63676&highlight=float
    nur leider funkt das ganze ned so recht 😞

    Bsp:
    wenn ich hab "2629.93" und ich wende die dorten beschriebene Methode an,
    dann wird "2629.92" ausgespuckt... (hier halt nicht mal/durch 10, sondern 100)

    hab jetzt folgendes versucht:

    #include <math.h>
    .
    .
    double doubleValue = 2629.93;
    int X = ( (int)fabs(doubleValue * 1000) ) /10;
    
    cout<< X / 100.0;
    

    scheint zumindest mit meinen paar Testwerten zu funktionieren.
    Aber wie schaut's da allgemein aus?

    danke
    Martin



  • double z  = 123.4567;
    double z2 = (int) (z* 100) /  100.0; //schneidet nach 2 NKS ab 
    double z3 = (int) (z*1000) / 1000.0; //schneidet nach 3 NKS ab 
    ...
    


  • naja,

    meistens...
    wenn aber Ausgangswerte dabei sind, die sowieso nur 2 Nachkommastellen haben,
    dann funktioniert's irgendwie ned so recht:

    double doubleValue=2629.93;
    
    int X;
    
    X= (unsigned int) (doubleValue * 100);
    cout<<X / 100.0<<endl;  // Ausgabe: 2629.92 -> um 0.01 zu klein
    
    X = ( (unsigned int)fabs(doubleValue * 1000) ) /10;
    cout<<X / 100.0<<endl;  // Ausgabe: 2629.93 -> passt, aber für doubleValue > 10000 geht's auch hier nimma
    

    aber trotzdem danke

    PS:
    hab's grad auch noch mit normalen int's ausprobiert, aber gleiches Ergebnis 😞



  • So ein Müll,
    Hi

    stell grad fest, dass die Ausgabe Compilerabhängig is. 😮

    Borland:

    2629.92
    2629.93
    

    Digital Mars (http://www.digitalmars.com/)
    und g++

    2629.92
    2629.92
    

    VC++ 6 macht's richtig

    2629.93
    2629.93
    

    Was soll ich etz machen?


Anmelden zum Antworten