找到位置的因素

时间:2011-06-11 04:28:12

标签: php

我知道问题标题似乎“不可理解”,但我不知道如何为这个特定问题编写问题标题。

问题: 我想找到位置因素。

让我用一个例子来澄清你。

Value          Factor
[Available]    [Have to find out] 
----------------------------------
1               10
3               10
9               10
10              10
11              10
25              10
50              10
75              10
99              10

100             100
101             100
105             100
111             100
127             100
389             100
692             100
905             100
999             100

1000            1000
1099            1000
1111            1000
4500            1000
6825            1000
7789            1000
9999            1000

10000           10000
10099           10000
51234           10000
98524           10000
99999           10000

100000          100000

等等。

我希望你明白我的意思。

4 个答案:

答案 0 :(得分:3)

假设前三个值应为1(如Asaph所述),那么您只需要使用您在学校学到的所有logarithm内容:

pow(10, floor(log10($n)))

那么,这是如何工作的?数字x的以10为底的对数是y10^y = x(其中^代表取幂)。这给了我们以下内容:

log(  1) 0
log( 10) 1
log(100) 2
...

因此,1到10之间的数字的log10将介于0和1之间,介于10和100之间的数字的log10将介于1和2之间,等等。{{1函数将给出对数的整数部分(我们这里只处理非负值,所以不必担心floor哪个方向带负值)所以floor会对于1到10之间的任何东西都是0,对于10到100之间的任何东西都是1,等等。现在我们需要10个因子,所以简单floor(log10())给出了最终结果。

参考文献:

答案 1 :(得分:2)

我仍然不确定你在问什么,但似乎你想要将值映射到其他值......在php数组中可以用任何东西编制索引(使它们成为地图)。如果999总是表示系数为100而1099总是表示系数为1000,则可以将数组[999]的值设置为100,将数组[1099]的值设置为1000,等等。

答案 2 :(得分:0)

基本上Factor 10 $value减去1减去if($value < 10) { $value += 10; } $numOfDigits = count(str_split($value,1)); $factor = pow(10,$numDigits-1); 的位数(除了单位数字):

{{1}}

答案 3 :(得分:0)

此功能应该适合您。看起来列表中的前三个“因素”不符合模式。如果在您的示例数据集中,前3个“因子”应该是1而不是10,那么您可以安全地删除下面函数体的前3行。

function getFactor($num) {
    if ($num < 10) { // If the first 3 "factors" listed
        return 10;  // in the question should be 1 instead of 10
    }               // then remove these 3 lines.
    $factor = 1;
    while($factor <= $num) {
        $factor *= 10;
    }
    return $factor / 10;
}