Para İşlemenin Farklı Olmasının Sebepleri
<p>Finansal yazılımlar, bir blog veya yapılacaklar uygulaması geliştirmekten farklıdır. Kullanıcılar «<em>99.99 $ Öde</em>» butonuna bastıklarında, hesaplarından tam olarak 99.99 $ çıkmasını beklerler - <strong>99.989999999 $</strong> veya <strong>100.000000001 $</strong> değil.</p>
<p>0.01 centlik bir yuvarlama hatası önemsiz gibi görünebilir. Ancak bunu aşağıdaki durumlarla çarptığınızda:</p>
<ul>
<li>Günlük 10,000 işlem</li>
<li>500 çalışan için aylık maaş ödemeleri</li>
<li>Yıllarca biriken muhasebe tutarsızlıkları</li>
</ul>
<p>Birdenbire «küçük float hassasiyetsizliği» birkaç bin dolara, başarısız denetimlere veya kızgın müşterilere dönüşebilir.</p>
<h3>
<a name="the-silent-killer-float-precision" href="#the-silent-killer-float-precision"></a>
Sessiz Katil: Float Hassasiyeti
</h3>
<p>PHP projelerinin %90'ı parayı yanlış yönetiyor. İşte klasik tuzak:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code>$subtotal = 0.1 + 0.2; // Olması gereken 0.3$tax = $subtotal * 1.08; // Olması gereken 0.324
$total = $tax + 0.50; // Olması gereken 0.824
echo json_encode([
‘subtotal’ => $subtotal, // 0.30000000000000004 😱
‘tax’ => $tax, // 0.32400000000000006
‘total’ => $total // 0.8240000000000001
]);
<p>API’niz sahte sayılar döndürüyor. Muhasebeciniz panik içinde arıyor. Müşteriler yanlış ücretlerden şikayet ediyor.</p>
<h3>
<a name="the-root-cause-ieee-754-horror" href="#the-root-cause-ieee-754-horror"></a>
Temel Sebep: IEEE 754 Korkusu
</h3>
<p>Bu bir PHP hatası değil. Bu, ikili kayan nokta matematiği:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>0.1 decimal ≠ exact binary representation↓
0.1000000000000000055511151231257827021181583404541015625 (24+ bytes!)
0.1 + 0.2 ≠ 0.3 exactly
↓
0.3000000000000000444089209850062616169452667236328125


