Genauigkeit einer Zahl festlegen?



  • Habe einen Workflow, welche Allokationen mit max. Auflöung von einer ZentelSekunden enthalten soll? Die Zeitwerte werden als double angelegt!

    wie könnte ich werte mit mehren nachkommastellen auf eine nachkomma stelle runden?

    so:

    double d= 1.4234532;
    
    double rounded= ((double)((int)(d*10.0)))/10;
    

    EDIT: Es soll IMMER aufgerundet werden ....



  • man: floor() und man: ceil() dürften für dich geeignet sein 😉 (zur Not mußt du den Wert dafür noch geeignet skalieren)

    double round_up(double val,int precision)
    {
      double skal = pow(10,precision);
      return ceil(val*skal)/skal;
    }
    


  • BorisDieKlinge schrieb:

    Habe einen Workflow, welche Allokationen mit max. Auflöung von einer ZentelSekunden enthalten soll?

    Ist das eine Frage?

    Die Zeitwerte werden als double angelegt!

    wie könnte ich werte mit mehren nachkommastellen auf eine nachkomma stelle runden?

    so:

    double d= 1.4234532;
    
    double rounded= ((double)((int)(d*10.0)))/10;
    

    EDIT: Es soll IMMER aufgerundet werden ....

    Stellt sich die Frage, warum du runden willst. Wenns nur um die Anzeige geht => setprecision und andere Streammodifikatoren. Wenn du - zu welchem zweck auch immer - intern runden willst, siehe ceil() (CStolls Bsp)



  • double round_up(double value, std::size_t precision)
    {
        const double skal(std::pow(10.0, static_cast<double>(precision)));
        return std::ceil(val * skal) / skal;
    }
    

    sonnst könnte es dir passieren, dass er nicht weiß, welche std::pow er nutzen soll ...



  • Ich möchte nur nochmal darauf hinweisen dass double und float sich nicht genauen Darstellung von Dezimalzahlen eignen, und man daher mit double/float auch nicht genau mit "auf eine Dezimalstelle gerundeten" Zahlen rechnen kann.



  • Double und float sind intern sehr genau. Das Runden ist Angelegenheit der
    Ausgabe - siehe vorherige Anworten. Vielleicht verwendest Du effizienter
    long integer oder integer, dann gibt es keine Probleme mit irgendwelchen
    Rundungen.



  • Hallo,
    ich hab auch mal kurz eine frage zum thema runden und wollte jetzt nicht extra einen neuen thread.
    mein problem ist ich habe eine variable double zahl z.b. 90.1765 die soll dann immer auf eine stelle hinter dem komma gerundet werden, also 90.2.
    kennt da jm. eine gute kurze lösung?



  • Siehe (D)Evils Post und rufe die Methode entsprechend auf.

    Wenn kaufmännisch gerundet werden soll, statt ceil floor nehmen und vorher 0.5 draufrechnen.



  • gibts keine elegantere lösung?



  • ceil(x*10.0)/10.0
    

    Kürzer ist es vielleicht...



  • noch eine frage. wie bekomm ich es hin, wenn mein ergebnis 1 ist und ich möchte 1.0000 ausgeben?




Log in to reply