例如,我需要一个能给我第10个或第100个数组的函数
如果我通过5,它应该返回1到10
如果我通过67,它应该返回1到100
如果我通过126,它应该返回101到200
如果我通过2524,它应该返回2001至3000
任何指导?
其他人给你很好的答案,但我不确定他们是否强调了重要的原则,即:
您正在寻找一个取决于给定数字的"数量级"的函数.对数可能是获取该信息的最简单方法.
日志基数10或多或少回答了这个问题"10这个数字的最大幂是多少可被整除?" 或者"在将这个数字小于1之前,我可以将这个数字除以10?"
您可以编写一个手动回答此问题的函数,当然:
function divsBy10(n) { var i = 0; while(n > 1) { n = n/10; i++; } return i-1; }
而且开销不会很高.不过,我猜它使用原生实现的数学函数要快一些.当然,它看起来并不像你在Actionscript中得到一个本机日志基础...它似乎是Math.log是一个自然日志(日志基础e).有一个数学标识,表示log_10 x = log_e x/log_e 10 ...而ActionScript确实给你一个log_e 10作为常量(Math.LN10).所以,
function log10(n) { return Math.log(n)/Math.LN10; }
Now, log10 won't yield an integer answer to the questions I mentioned above ("How many times could I divide n by 10 before it's less than 1?"), because it's actually the inverse of 10^n, but the integral portion of the return value will be the answer to that question. So you'd want to do Math.floor on the value you get back from it, and from there, do the various computations you'll need in order to get the specific array ranges you need.