带有数学函数的php十六进制到dec返回不同的结果

带有数学函数的php十六进制到dec返回不同的结果,php,Php,为了将长值从hex转换为dec,我使用了php.net上注释中的一个函数: function bchexdec($hex) { $dec = 0; $len = strlen($hex); for ($i = 1; $i <= $len; $i++) { $dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i)))); }

为了将长值从
hex
转换为
dec
,我使用了php.net上注释中的一个函数:

function bchexdec($hex)
{
    $dec = 0;
    $len = strlen($hex);
    for ($i = 1; $i <= $len; $i++) {
        $dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
    }
    return $dec;
}
函数bchexdec($hex)
{
$dec=0;
$len=strlen($hex);

对于正常情况下的($i=1;$i),不应输出任何分数部分(包括零)

只是因为您没有设置
bcadd
的第三个参数:

比例
此可选参数用于设置结果中小数点后的位数。如果省略,它将默认为使用bcscale()函数全局设置的比例,如果未设置,则返回到0

因此,除非您的代码中有明确的部分设置,否则:

bcscale(10)
你不会再有那种感觉的

这里有一些到和的链接

这是一个例子:

$a = array();
$a['x1'] = bchexdec('c4b03b0a103b7d6ee7199930ad8c27bd');
bcscale(10);
$a['x2'] = bchexdec('c4b03b0a103b7d6ee7199930ad8c27bd');
print_r($a);
// Array
// (
//    [x1] => 261443728880417560465069440558290446269
//    [x2] => 261443728880417560465069440558290446269.0000000000
// )

无法复制它。请提供指向某些联机IDE的链接以显示这两个结果。您好,您可以在此处尝试:。这似乎是服务器端的问题,因为在该IDE上,结果始终没有结束零…开始很简单:您重新启动了服务器吗?同时,请确保您只使用上面的代码,而脚本中没有任何其他代码测试它。那么我帮不了你,因为我也不能在任何地方重现这个问题。。
$a = array();
$a['x1'] = bchexdec('c4b03b0a103b7d6ee7199930ad8c27bd');
bcscale(10);
$a['x2'] = bchexdec('c4b03b0a103b7d6ee7199930ad8c27bd');
print_r($a);
// Array
// (
//    [x1] => 261443728880417560465069440558290446269
//    [x2] => 261443728880417560465069440558290446269.0000000000
// )