Php 检查数字1在十进制数中的位置
我有数百个数字,比如:Php 检查数字1在十进制数中的位置,php,regex,count,rounding,Php,Regex,Count,Rounding,我有数百个数字,比如: 0.00100000 0.01000000 0.01000000 1.00000000 0.00001000 0.00000100 我需要检查数字1在这些数字中的位置,所以基本上 1.00000000 = 1 0.10000000 = 2 0.01000000 = 3 我尝试了Round()函数,但它有时会打印1.E-6之类的数字,我需要数字1的确切位置 非常感谢您的帮助。看来我找到了一个解决方案,使用了strpos()函数,效果非常好 基本上: strpos(0.0
0.00100000
0.01000000
0.01000000
1.00000000
0.00001000
0.00000100
我需要检查数字1在这些数字中的位置,所以基本上
1.00000000 = 1
0.10000000 = 2
0.01000000 = 3
我尝试了Round()
函数,但它有时会打印1.E-6之类的数字,我需要数字1的确切位置
非常感谢您的帮助。看来我找到了一个解决方案,使用了
strpos()
函数,效果非常好
基本上:
strpos(0.01000000, 1)
我不会太依赖你在回答中提出的方法。请改用以下函数:
function index_of_one($dec)
{
// maximum precision is 15
$str = str_replace('.','',sprintf('%.15f', $dec));
$pos = strpos($str, '1');
if ($pos === false) {
return -1;
}
return ($pos + 1);
}
例如:
$dec1 = 1.00000000;
$dec2 = 0.10000000;
$dec3 = 0.00010000;
echo index_of_one($dec1); // 1
echo index_of_one($dec2); // 2
echo index_of_one($dec3); // 5
请访问以测试它。我说,当微优化不是首要任务时,当它减少了总的函数调用时,当它提供了直接的、期望的结果时,使用regex是合适的 考虑到您的案例和示例输入,
preg_match_all('/[^.](?=[^1]*1)| 1.*/',$number)
一步到位。它匹配每个单独的非点字符,后面跟一个1
,或者从1
到字符串的末尾
()
preg\u match\u all()
的返回值是匹配数,因此它提供的正是您所要求的——一个计数
实际上,第一个1
之后的点和任何字符都不会被计数。如果未找到1
,则计数为0
(而不是其他答案所建议的-1)
下面是一组测试()的演示:
输出:
0.00100000 = 4
0.10000000 = 2
0.01000000 = 3
1.00000000 = 1
0.00001000 = 6
0.00000100 = 7
0.00000000 = 0
我无法想象你怎么认为舍入会有什么帮助。我以为舍入会去掉零(它实际上是这样做的!),然后我就可以计算数字了。回音舍入('0.00001000');=0,那么你要找的是1,那么四舍五入(0.01000000,2)=0.01,然后数数呢?基本上,输出将是我正在寻找的3。难道你不明白吗?你总是在找一个?它永远不可能是0.00200000?非常感谢,你说的是真的,带点的STRPO将从第一个小数位开始偏移数字。非常感谢。
0.00100000 = 4
0.10000000 = 2
0.01000000 = 3
1.00000000 = 1
0.00001000 = 6
0.00000100 = 7
0.00000000 = 0