Wie wird eine Dezimalzahl auf die nächste Fraktion gerundet?

7

Nicht sicher, ob das der richtige Weg ist, das zu fragen oder nicht, aber hier ist das Problem.

Wie finde ich bei einem Breitengrad von 26,746346081599476 die Zahl 26,75 als 16. Stelle größer als die Zahl und 26.6875 als 16. Stelle niedriger als die Zahl?

%Vor%

Ich benutze JavaScript, daher wäre eine Antwort hilfreich, aber nicht notwendig. Ich könnte es brutal erzwingen, aber ich suche den eleganten Weg, es zu tun.

Das größere Bild ist, dass ich Standardkacheln für eine Kartenanwendung erstellen möchte, an der ich arbeite. Wir verwenden Bing-Maps und ich lade Daten bei Bedarf, jedes Mal, wenn der Benutzer schwenkt oder zoomt. Es wäre schön, das Server-Caching für diese Anfragen zu nutzen, wenn ich die an den Server gesendeten Abfragen standardisieren würde einige Cachetreffer. Wenn ich die Anfragen an den Server nicht standardisiere, ist es höchst unwahrscheinlich, dass derselbe Benutzer genau den gleichen Ort zur gleichen Zeit sieht.

Es besteht also eine höhere Chance, Cache-Treffer zu erhalten: /path/data.json?tl=26.6875,-80.6875&br=26.75,-80.75 als mit: /path/data.json?tl=26.74946187679896,-80.10930061340332&br=26.743234270702878,-80.09607195854187

Alle Antworten außerhalb der Box sind ebenfalls willkommen.

    
sheats 01.10.2009, 21:17
quelle

6 Antworten

14

Um die nächsten Vielfachen von 1 / n zu finden:

%Vor%

Vielleicht möchten Sie eine spezielle Behandlung verwenden, wenn Ihre Nummer bereits ein Vielfaches von 1/16 ist.

%Vor%     
mob 01.10.2009, 21:25
quelle
9

Sie multiplizieren den Wert mit 16, verwenden die Methode floor oder ceil und dividieren durch 16:

%Vor%     
Guffa 01.10.2009 21:27
quelle
1

Klingt nach Rundung auf den nächsten 16. ...

%Vor%

Sie könnten Zahlen erhalten, die wegen der Float-Repräsentation nicht genau sind, aber das sollte in Ihrem Fall keine Rolle spielen, wenn Sie es nur zum Caching verwenden.

    
Georg Schölly 01.10.2009 21:29
quelle
1
%Vor%     
Russ Cam 01.10.2009 21:43
quelle
0

Was sind die kleinsten Fraktionen, an denen Sie interessiert sind? IE sind 16tel werden die kleinsten Inkremente sein?

Wenn ja, multiplizieren Sie einfach Ihre Zahl mit 16. Schneiden Sie sie auf ein int und teilen Sie durch 16, um die untere Grenze zu finden. Trunc es zu einem int, addiere 1, dann dividiere durch 16, um die obere Grenze zu finden.

    
David Oneill 01.10.2009 21:27
quelle
0

Einige Strategien, die noch nicht veröffentlicht wurden:

A) Erstellen Sie eine Nachschlagetabelle, die die Nachkommastellen auf den nächsten 16en abbildet. Verwenden Sie einfach die Präzision, die Sie benötigen (wahrscheinlich Hundertstel).

B) Erstellen Sie eine Tabelle aller 16tel von 0 bis 1, und führen Sie eine binäre Suche mit der Nummer% 1 durch.

    
patros 01.10.2009 21:29
quelle