Kodealgo

Floating Point PHP

Floating point (float, double, atau bilang riil) merupakan tipe data PHP yang mewakili bilangan pecahan. Cara yang paling mudah membedakan bilangan bulat (desimal) dan bilangan pecahan adalah bilangan pecahan umumnya mengandung titik.

Sama halnya seperti integer, floating point juga memiliki batas maksimum dan minimum yang dapat diwakili, tergantung dengan platform yang kita gunakan.

Selain itu, bilangan pecahan di PHP perilakunya sama dengan bahasa pemrograman pada umumnya hanya bisa presisi pada jumlah digit tertentu, lebih dari itu berpotensi mengahsilkan nilai yang salah secara matematis.

Berikut beberapa topik yang akan kita bahas terkait tipe data floating point:

  1. Cara Membuat Nilai Floating Point
  2. Nilai Minimum dan Maksimum Floating Point
  3. Konversi String ke Floating Point

Cara Membuat Nilai Floating Point

Nilai floating point di PHP dapat ditulis dalam beberapa cara, termasuk notasi eksponen. Berikut contoh nilai yang valid.

<?php

$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567;

var_dump($a); // float(1.234)
var_dump($b); // float(1200)
var_dump($c); // float(7.0E-10)
var_dump($d); // float(1234.567)

Perhatikan contoh nilai floating point pada variabel $d, kami menggunakan garis bawah untuk keterbacaan, ini tidak akan mempengaruhi nilainya. Beberapa variabel diatas yang mengandung huruf e atau E ditulis menggunakan notasi eksponen.

Nilai Minimum dan Maksimum Floating Point

Sama seperti integer, nilai floating point juga memiliki batas minimum dan maksimum yang bergantung dengan platform yang digunakan, kita dapat memeriksanya menggunakan konstanta PHP_FLOAT_MIN untuk batas minimal dan PHP_FLOAT_MAX untuk batas maksimal.

<?php

$minFloat = PHP_FLOAT_MIN;
$maxFloat = PHP_FLOAT_MAX;

var_dump($minFloat); // float(2.2250738585072014E-308)
var_dump($maxFloat); // float(1.7976931348623157E+308)

Digit desimal yang dapat diwakili secara presisi juga bergantung pada platform, kita bisa menggunakan konstanta PHP_FLOAT_DIG untuk melihatnya.

$precisionDigit = PHP_FLOAT_DIG;

var_dump($precisionDigit); // int(15)

Pada platform atau komputer yang saya gunakan digit pecahan (setelah titik) yang dapat diwakili secara presisi adalah 15 digit, jika kita melakukan kalkulasi yang menghasilkan digit pecahan lebih dari itu hasilnya berpotensi salah.

Selain itu, karena bilangan floating point basis 10 seperti 0.1 atau 0.7 tidak memiliki representasi yang tepat sebagai bilangan floating point basis 2 (biner) yang digunakan secara internal, mereka menjadi tidak peduli dengan ukuran mantissa.

Oleh karena itu, secara internal mereka tidak dapat diubah ke nilai biner yang tepat tanpa kehilangan presisi. Hal ini dapat menyebabkan hasil yang membingungkan, contoh:

<?php

$a = 0.1 + 0.7;

var_dump($a); // float(0.7999999999999999)

Lihat contoh di atas, alih-alih menghasilkan nilai 0.8 mereka menghasilkan 0.7999999999999999, hal ini terjadi karena PHP menggunakan floating point basis 2 secara internal, dalam beberapa kasus hasilnya kehilangan presisi (tidak tepat).

Konversi String ke Floating Point

Dalam beberapa kasus terkadang kita ingin mengkonversi angka floating point yang ada di dalam string menjadi tipe data floating point (bukan string).

Hal ini bisa kita lakukan selama string berisi angka floating point yang valid, jika string hanya mengandung huruf maka metode ini akan mengahsilkan nilai floating point 0.

<?php

$a = '0.4';
$b = 'abc';

$aFloat = (float) $a;
$bFloat = (float) $b;

var_dump($aFloat); // float(0.4)
var_dump($bFloat); // float(0)