如何将小数舍入到最接近的分数?

she*_*ats 7 javascript gis math decimal bing-maps

不确定这是否是问这个问题的正确方法,但这是问题所在.

鉴于纬度为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
Run Code Online (Sandbox Code Playgroud)

我正在使用JavaScript,所以答案是有帮助的,但不是必需的.我可以蛮力,但我正在寻找优雅的方式去做.

更大的图景是我想为我正在研究的地图应用程序创建标准图块.我们正在使用Bing地图,每次用户平移或放大时我都会按需加载数据.利用服务器端缓存来处理这些请求会很好,所以如果我标准化发送到服务器的查询,我会得到一些缓存命中.如果我没有标准化对服务器的请求,则同一用户极不可能同时查看确切的某个位置.

因此,有越来越缓存的机会较高,不但有:/path/data.json?tl=26.6875,-80.6875&br=26.75,-80.75比:/path/data.json?tl=26.74946187679896,-80.10930061340332&br=26.743234270702878 ,-80.09607195854187

我们也欢迎任何开箱即用的答案.

mob*_*mob 14

要找到最接近的1/n的倍数:

lower_bound = 1.0 / n * Math.floor(n * your_number);
upper_bound = 1.0 / n * Math.ceil(n * your_number);
Run Code Online (Sandbox Code Playgroud)

如果您的号码已经是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);
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 9

您将该值乘以16,使用floor或ceil方法,除以16:

var higher = Math.ceil(number * 16) / 16;
var lower = Math.floor(number * 16) / 16;
Run Code Online (Sandbox Code Playgroud)