Was ist der einfachste Weg, um eine C ++ float
Variable, die einen Wert von 0.6000002 hat, auf einen Wert von 0.6000 abzuschneiden und in der Variablen?
Zuerst ist es wichtig zu wissen, dass Gleitkommazahlen angenähert sind. Siehe den Link von @Greg Hewgill, um zu verstehen, warum dieses Problem nicht vollständig lösbar ist.
Aber hier sind ein paar Lösungen für das Problem, die wahrscheinlich Ihre Bedürfnisse erfüllen werden:
Wahrscheinlich die bessere Methode, aber weniger effizient:
%Vor%Der effizientere Weg, aber wahrscheinlich weniger präzise:
%Vor%Eine gute Referenz für warum das passiert, finden Sie in Was jeder Computer Wissenschaftler sollten über Gleitkommaarithmetik Bescheid wissen von David Goldberg.
Realistisch ist das nicht möglich. Es ist keine C ++ - Einschränkung, sondern genau so, wie Gleitkomma funktioniert. Für viele Werte gibt es keine präzisen Darstellungen, so dass Sie nicht einfach auf eine Anzahl von Ziffern abschneiden können.
Sie können beim Drucken mit PrintF-Formatzeichenfolgen abgeschnitten werden.
Wenn Sie wirklich nur eine begrenzte Anzahl von Ziffern speichern können, sollten Sie stattdessen einen Datentyp mit fester Genauigkeit verwenden.
Ich denke, die Frage, die hier gestellt werden sollte, ist: Warum brauchen Sie es abgeschnitten?
Wenn es für den Vergleich zwischen Werten ist, sollten Sie vielleicht den Epsilon-Test in Erwägung ziehen. (mit einem zusätzlichen Toleranzwert, in Ihrem Fall, da es viel größer scheint als das allgemein akzeptierte Epsilon).
Wenn Sie es nur als 0.6000 ausdrucken möchten, verwenden Sie die von anderen vorgeschlagenen Methoden.
In Ihrem Fall werden beispielsweise drei Ziffern abgeschnitten (numDigits). Sie würden verwenden:
%Vor%(Sie würden wahrscheinlich das Ergebnis von powf irgendwo speichern, da Sie es zweimal benutzen.)
Da Floats normalerweise auf Computern gespeichert werden, sind wahrscheinlich Ungenauigkeiten vorhanden. Das ist es, was man für die Verwendung von Floats bekommt.
Hier ist eine Funktion, die den Hinweis in anderen Antworten und ein Anwendungsbeispiel verwendet:
%Vor%Ähnlich wie bei anderen Antworten, ABER Sie dürfen nicht vergessen, dass die Begriffe "rund", "floor" und "trunc" per Definition unterschiedlich sind. Siehe das Definitions- und Ausgabebeispiel für Folgendes:
In diesem Fall müssen wir mit einer Genauigkeit von 4 Dezimalstellen arbeiten und nicht signifikante Dezimalstellen entfernen:
%Vor%oder
%Vor%