Runde ein Schwimmer auf einem regelmäßigen raster mit vordefinierten Punkte

Möchte ich um eine float-Zahl um eine gegebene Genauigkeit, zum Beispiel :

0.051 i want to convert it to
0.1

0.049 i want to convert it to
0.0

0.56 i want to convert it to
0.6

0.54 i want to convert it to
0.5

Ich kann es besser erklären, aber der Grund dafür ist, das übersetzen ein Ort (wie 0.131 f, 0.432 f), um die Lage der Fliesen in einem raster (wie 0.1 f, 0.4 f).

  • Rundung eine floating-point-Zahl von 1 oder mehr Nachkommastellen ergibt nicht viel Sinn; eine Zahl, wie 0.1 können nicht exakt dargestellt werden, die in binary floating-point. Die Rundung kann getan werden, auf die Ausgabe (zu einem string oder in einer Datei).
  • Wir sind in der IT-Abteilung sind wir darzustellen versuchen, die unendlichen Möglichkeiten der realen Welt in den Zeilen von code, alles macht hier Sinn. Ich bin mit diesem für ein infinite-scrolling hintergrund in einem Spiel, verloren die Genauigkeit ist nicht wirklich wichtig.
  • Ich habe getestet, und es scheint nicht richtig funktioniert. Wenn Sie versuchen, Runde 127, es gibt 128 (ich verwende double statt float für f und für den Rückgabetyp).
  • Sie wurden nicht der Punkt der Funktion ,was ist die Präzision, die Sie auf der Durchreise sind? wenn Sie 2 erhalten Sie 128 verursachen, erhalten Sie die nächste Nummer aus 0,2,4,6...,128,130...(2 als Inkrement),wenn Sie pass 127.456 und Präzision 0.01 f erhalten Sie 127.46 Ursache 127.46 ist in der Nähe von 0,0.01,0.02 f.....127.45,127.46,127.47(0.01 als Inkrement)
  • Gut in diesem Fall Sie richtig sind, so rundet die Funktion auf die nächste pair-Nummer, und ich bin mit 2 als Präzision. Dennoch, ich denke der Titel der Frage mag irreführend sein. Meiner Meinung nach, und unter Berücksichtigung anderer Implementierungen der Runde in anderen Programmiersprachen, Präzision bezieht sich auf die Anzahl der Dezimalstellen.
  • der Titel scheint irreführend zu sein, aber ich konnte nicht finden, einen besseren Titel zu der Zeit.
  • kommen Sie hier) diese Frage ist nicht ein Duplikat deiner Frage, ich würde vorschlagen, un-löschen Ihrer Frage. Diese Frage ändert der Schwimmer und macht auch keine Lösung für das Problem angezeigt. Die Lösung des Problem ist eine andere Angelegenheit und erfordert keine änderung der Schwimmer.
  • Runden von zahlen innerhalb des Programms macht Sinn, wenn Sie verlieren Präzision und müssen vergleichen Sie das Ergebnis mit etwas. Beispiel, wenn Sie multiplizieren eine matrix (intern ein double-array) für die invertierte sollten Sie die identity-matrix, aber wie können Sie verlieren Präzision innerhalb der Multiplikations-routine, die Sie bekommen können auch kleine Stückzahlen in Orten, die Sie bekommen sollte Nullen. Wenn Sie versuchen, vergleichen Sie das Ergebnis mit einer realen Identität-matrix, erhalten Sie ein FALSE statt eines zu erwartenden WAHR. So Runden die Multiplikation Ergebnis kann eine gute Idee sein, in diesem Fall. Mein Weg zur Runde: #define ROUND(n,p) round(n*pow(10,p))/pow(10,p)

InformationsquelleAutor SteveL | 2012-06-26
Schreibe einen Kommentar