blog /

Tips Pemrograman: Perhitungan Pecahan PHP Juga Bermasalah

Tips Pemrograman: Perhitungan Pecahan PHP Juga Bermasalah
Terkait dengan artikel sebelumnya tentang problem perhitungan pecahan di JavaScript. Ternyata bahasa pemrograman PHP juga memiliki problem "bugs" yang hampir sama. Memang sangat sulit dipercaya, tapi kami akan buktikan!

Khususnya untuk rekan-rekan software programmer dan pengembang aplikasi web. Silahkan lihat penjelasan dan solusinya berikut ini.

Sekilas Tentang PHP

PHP (PHP Hypertext Preprocessor) adalah salah satu bahasa pemrograman yang cukup populer. Jika di artikel sebelumnya pernah kami ulas tentang bahasa pemrograman JavaScript yang dijalankan di web browser. Berbeda dengan JavaScript, code program PHP khususnya hanya akan dijalankan di server. Yang umum disebut dengan istilah server-side scripting.

Selain PHP ada juga beberapa server-side scripting lainnya seperti: Perl, Python, ASP Classic, ASP.Net, Ruby, Java Server Pages, dsb.

Apakah PHP banyak yang menggunakan? Jawabannya: Ya! Facebook adalah salah satu contoh website yang dibangun dengan bahasa pemrograman PHP. Bahkan menurut Wikipedia, per Januari 2013 ada lebih dari 240 juta website dibangun dengan bahasa pemrograman ini.

Perhitungan Pecahan PHP Bermasalah

Dengan kalkulator atau Microsoft Excel jumlahkan dua bilangan berikut ini:

100316.58 + 32000

Hasilnya:

132316.58

Untuk lebih jelasnya kami akan buat contoh program PHP sederhana dengan menggunakan perhitungan debet dan credit. Seperti layaknya yang bisa kita temukan dalam software akuntansi atau sistem keuangan:

<?php

$debet1 = 100316.58;

$debet2 = 32000;
 
 
$total_db = $debet1 + $debet2;
 
 
$total_cr = 132316.58;
 
 
if ($total_db == $total_cr) {

echo "Balance";

} else {

echo "Selisih: " . ($total_db - $total_cr);

}

?>

Hasil yang diharapkan adalah:

Balance

Namun, jika kita jalankan hasilnya:

Selisih: 2.9103830456734E-11

Dalam software akuntansi atau sistem keuangan, jika ada masalah perhitungan seperti diatas pasti akan fatal akibatnya. Karena seperti yang kita tahu, standard akutansi keuangan mewajibkan: input total debet dan kredit harus sama (balance). Jika ada selisih, maka akan salah juga semua output laporan keuangan yang dihasilkan.

Kenapa Bisa Problem?

Jawabannya sama seperti artikel kami sebelumnya tentang problem perhitungan pecahan di JavaScript. Memang ada masalah di perhitungan pecahan. Ini adalah limit batasan dan kelemahan komputer. Dan kami sudah buktikan diatas. Masalah ini ada juga di bahasa pemrograman PHP.
 
 
Solusinya

Untuk mendapatkan hasil perhitungan yang lebih presisi di PHP kita bisa gunakan BC Math Function.

Berikut rangkuman beberapa fungsi perhitungan dasar matematika yang umum digunakan (selengkapnya lihat di dokumentasi):

  • Pejumlahan : bcadd()
  • Pengurangan : bcsub()
  • Perkalian : bcmul()
  • Pembagian : bcdiv()

Berikut perbaikan menggunakan fungsi BC Math untuk contoh program yang tadi bermasalah:

<?php

$debet1 = 100316.58;

$debet2 = 32000;
 
 
$total_db = bcadd($debet1, $debet2, 2);
 
 
$total_cr = 132316.58;
 
 
if ($total_db == $total_cr) {

echo "Balance";

} else {

echo "Selisih: " . ($total_db - $total_cr);

}

?>

Silahkan dicoba. Hasilnya pasti akan sesuai dengan perhitungan manual.
 
 
Penutup

Problem ini jarang diketahui oleh para pengembang aplikasi web dan software programmer (khususnya programmer pemula). Bahkan pada saat artikel ini kami buat, tidak kami temukan satupun ulasan atau peringatan tentang adanya masalah ini di buku-buku pemrograman PHP, khususnya yang dijual di toko-toko buku Indonesia.

Akhir kata, jika bermanfaat. Jangan lupa share artikel ini. Agar bisa diketahui rekan-rekan programmer PHP lainnya juga.

Article ini bebas boleh di copy untuk ditampilkan di blog dan website lain. Namun harap cantumkan link sumbernya (website kami).
Lihat juga artikel lainnya:
Buat Software Lebih Mudah, Produktif Dengan Monitor Tambahan?
Tips Pemrograman: Awas Problem Perhitungan Pecahan JavaScript
Pembuatan Sistem, Integrasi WebService Untuk Tokopedia
comments powered by Disqus