Kaç satır uğratığım şeyi tek satır kodla çözdük çok teşekkür ederim ellerine sağlık.
Muhtemelen hatanız gelen $special değişkenine ait değerde (muhtemelen string olarak geliyor fiyat değeri). Numeric olmadığı için php bazı durumlarda doğru formatlayamıyor. (normalde tipi numeric olmasa da php string değeri numeric formata convert edebiliyor ama ondalık değerler işin içine girince yanlış çıktı verebiliyor)
Şöyle bir satır ekleyerek tekrar kontrol edebilir misiniz?
$special = (float)str_replace(',', '.', str_replace('.', '', $special));Bu arada ondalık rakamlarla çalışan arkadaşlar için bir tavsiyem olsun lütfen hesaplama kısmını derleyiciye ya da veritabanına yaptırtmayın

bunun yerine ondalık rakamınızı kapsayacak şekilde integer değer tutun. örn: 2,50 TL lik ürünün fiyat değerini (int)250 olarak, 3500,50 TL lik ürünün fiyatını (int)350050 olarak tutarak ve işlem yapmanızı tavsiye ederim.