문제

그것이 이것을 묻는 올바른 방법인지 확실하지 않지만 여기에 문제가 있습니다.

위도 26.746346081599476의 위도가 주어지면 숫자 26.75는 숫자보다 16 위, 26.6875는 숫자보다 16 번째 낮은 것으로 어떻게 찾을 수 있습니까?

26.0
26.0625
26.125
26.1875
26.25
26.3125
26.375
26.4375
26.5
26.5625
26.625
26.6875
My Number: 26.746346081599476
26.75
26.8125
26.875
26.9375
27.0

JavaScript를 사용하고 있으므로 답변이 도움이되지만 필요하지 않습니다. 나는 그것을 무차별하게 만들 수 있었지만 나는 그것을 할 수있는 우아한 방법을 찾고 있습니다.

더 큰 그림은 내가 작업중 인 매핑 애플리케이션을위한 표준 타일을 만들고 싶다는 것입니다. 우리는 빙 맵을 사용하고 있으며 사용자가 팬 또는 확대 할 때마다 주문형 데이터를로드하고 있습니다. 이러한 요청에 대한 서버 측 캐싱을 활용하는 것이 좋을 것입니다. 일부 캐시 히트. 서버에 대한 요청을 표준화하지 않으면 동일한 사용자가 정확한 위치를 동시에 볼 가능성은 거의 없습니다.

So there is a higher chance of getting cache hits with: /path/data.json?tl=26.6875,-80.6875&br=26.75,-80.75 than with: /path/data.json?tl=26.74946187679896,-80.10930061340332&br=26.743234270702878 , -80.09607195854187

상자 외부 답변도 환영합니다.

도움이 되었습니까?

해결책

가장 가까운 1/n을 찾으려면 :

lower_bound = 1.0 / n * Math.floor(n * your_number);
upper_bound = 1.0 / n * Math.ceil(n * your_number);

귀하의 번호가 이미 1/16의 배수 인 경우 일부 특별 취급을 사용하고 싶을 수도 있습니다.

// alternate solution so that lower_bound <= your_number < upper_bound
lower_bound = 1.0 / n * Math.floor(n * your_number);
upper_bound = 1.0 / n * Math.floor(n * your_number + 1.0);

다른 팁

값에 16을 곱하고 바닥 또는 천장 방법을 사용하고 16으로 나눕니다.

var higher = Math.ceil(number * 16) / 16;
var lower = Math.floor(number * 16) / 16;
function bounds(number, numerator, denominator) {
  var frac = denominator/numerator;
  return {
    lower: Math.floor(frac * number) / frac,
    upper: Math.ceil(frac * number) / frac,
  }
} 


bounds(26.746346081599476,1,16)
// returns an object with properties
// lower : 26.6875 
// upper : 26.75

가장 가까운 16 일로 반올림하는 것 같습니다…

rounded = Math.round(number * 16) / 16;

플로트 표현으로 인해 정확하지 않은 숫자를 얻을 수 있지만 캐싱에만 사용하는 경우에는 중요하지 않습니다.

분할에 관심이있는 가장 작은 분수는 무엇입니까? 즉 16 번째는 가장 작은 증분이 될까요?

그렇다면, 단순히 숫자에 16을 곱하십시오. int로 int로 곱하고 16으로 나누어 하한을 찾으십시오. int에 넣고 1을 추가 한 다음 16으로 나누어 상한을 찾으십시오.

지금까지 게시되지 않은 몇 가지 전략 :

a) 소수점 이후 가장 가까운 16 일까지 숫자를 매핑하는 조회 테이블을 만듭니다. 필요한 정밀도를 사용하십시오 (아마도 백분의).

b) 16 분의 1의 테이블을 0에서 1까지 만들고 숫자 % 1으로 이진 스타일 검색을 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top