bccomp is a PHP function provided by the BC math library.
php.net/manual/en/function.bccomp.php
Since PHP 4.0.4, that function is included in PHP
php.net/manual/en/bc.requirements.php
But it looks like your PHP does not include that math library.
So I would recommend to check with your hosting company or system administrator why this function is missing even though your version of PHP should have it included.
In the file "administrator/components/com_hikashop/helpers/helper.php", please add at the end :
if(!function_exists('bccomp')) {
function bccomp($num1, $num2, $scale = 0) {
// check if they're valid positive numbers, extract the whole numbers and decimals
if(!preg_match("/^\+?(\d+)(\.\d+)?$/", $num1, $tmp1) || !preg_match("/^\+?(\d+)(\.\d+)?$/", $num2, $tmp2))
return 0;
// remove leading zeroes from whole numbers
$num1 = ltrim($tmp1[1], '0');
$num2 = ltrim($tmp2[1], '0');
// first, we can just check the lengths of the numbers, this can help save processing time
// if $num1 is longer than $num2, return 1.. vice versa with the next step.
if(strlen($num1) > strlen($num2))
return 1;
if(strlen($num1) < strlen($num2))
return -1;
// If the two numbers are of equal length, we check digit-by-digit
// Remove ending zeroes from decimals and remove point
$dec1 = isset($tmp1[2]) ? rtrim(substr($tmp1[2], 1), '0') : '';
$dec2 = isset($tmp2[2]) ? rtrim(substr($tmp2[2], 1), '0') : '';
// If the user defined $Scale, then make sure we use that only
if($scale != null) {
$dec1 = substr($dec1, 0, $scale);
$dec2 = substr($dec2, 0, $scale);
}
// calculate the longest length of decimals
$DLen = max(strlen($dec1), strlen($dec2));
// append the padded decimals onto the end of the whole numbers
$num1 .= str_pad($dec1, $DLen, '0');
$num2 .= str_pad($dec2, $DLen, '0');
// check digit-by-digit, if they have a difference, return 1 or -1 (greater/lower than)
for($i = 0; $i < strlen($num1); $i++) {
if((int)$num1{$i} > (int)$num2{$i})
return 1;
if((int)$num1{$i} < (int)$num2{$i})
return -1;
}
// if the two numbers have no difference (they're the same).. return 0
return 0;
}
}
And that will fix the problem temporarily. But you'll get it again next time you update so it would still be interesting to contact your hosting company in order to understand what's going on.