Это проблема, присущая числам с плавающей запятой. Это конструктивная особенность, а не недостаток.
Убедитесь, что значение, возвращаемое из базы данных, является не значением с плавающей запятой, а строкой или десятичным числом. (Если типы данных `price` и` count` оба DECIMAL, то полученное выражение должно быть DECIMAL.
Если любой из них является плавающей точкой, то вы можете конвертировать в DECIMAL ...
SELECT brand, CONVERT( SUM(count * price) / SUM(count), DECIMAL(18,2) )
WHERE ... GROUP BY brand, ...;
Или преобразовать в строку
SELECT brand, CONVERT(CONVERT( SUM(count * price) / SUM(count), DECIMAL(18,2)),CHAR)
WHERE ... GROUP BY brand, ...;
Вы можете разрешить преобразование в DECIMAL сделать округление за вас. Если вы вернете DECIMAL или VARHCAR в Perl, это должно избежать проблем с плавающей запятой.
В целом, для обработки представления (округления) с плавающей запятой в Perl вы можете отформатировать, используя функцию sprintf, например,
my $rounded_val = sprintf(%.2f, $float_val);