BaseConversion adalah pustaka PHP untuk mengonversi basis bilangan, mirip dengan fungsi bawaan PHP base_convert()
. Namun, tidak seperti fungsi bawaannya, perpustakaan ini tidak dibatasi oleh bilangan bulat 32 bit dan mampu mengonversi angka dengan presisi sewenang-wenang. Perpustakaan ini juga mendukung konversi pecahan dan memungkinkan lebih banyak penyesuaian dalam hal basis bilangan.
Untuk mengoptimalkan konversi dalam jumlah besar, perpustakaan ini juga menggunakan dua strategi konversi yang berbeda. Dalam beberapa kasus, konversi bilangan dapat dilakukan hanya dengan mengganti digitnya dengan digit dari basis lain (misalnya saat mengonversi dari basis 2 ke basis 16). Strategi ini jauh lebih cepat dibandingkan strategi lainnya, yang hanya menghitung bilangan baru menggunakan aritmatika bilangan bulat presisi arbitrer.
Dokumentasi API yang dapat dibuat menggunakan Apigen dapat dibaca online di: http://kit.riimu.net/api/baseconversion/
gmp
(hanya diperlukan dukungan IDN) Cara termudah untuk menginstal perpustakaan ini adalah dengan menggunakan Komposer untuk menangani dependensi Anda. Untuk menginstal perpustakaan ini melalui Komposer, cukup ikuti dua langkah berikut:
Dapatkan composer.phar
dengan menjalankan instalasi baris perintah Composer di root proyek Anda.
Setelah Anda menjalankan skrip instalasi, Anda harus memiliki file composer.phar
di root proyek Anda dan Anda dapat menjalankan perintah berikut:
php composer.phar require "riimu/kit-baseconversion:^1.2"
Setelah menginstal perpustakaan ini melalui Komposer, Anda dapat memuat perpustakaan dengan menyertakan file vendor/autoload.php
yang dihasilkan oleh Komposer selama instalasi.
Jika Anda sudah familiar dengan cara menggunakan Composer, Anda dapat menambahkan perpustakaan sebagai dependensi dengan menambahkan file composer.json
berikut ke proyek Anda dan menjalankan perintah composer install
:
{
"require" : {
"riimu/kit-baseconversion" : " ^1.2 "
}
}
Jika Anda tidak ingin menggunakan Komposer untuk memuat pustaka, Anda juga dapat mengunduh pustaka secara manual dengan mengunduh rilis terbaru dan mengekstrak folder src
ke proyek Anda. Anda kemudian dapat memasukkan file src/autoload.php
yang disediakan untuk memuat kelas perpustakaan.
Cara paling mudah untuk menggunakan perpustakaan ini adalah melalui metode statis baseConvert()
yang disediakan oleh kelas BaseConverter
. Dalam kebanyakan kasus, cara kerjanya sama seperti base_convert()
. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' A37334 ' , 16 , 2 ); // outputs: 101000110111001100110100
Metode ini menerima bilangan negatif dan pecahan dengan cara yang sama. Parameter opsional keempat dapat digunakan untuk menentukan presisi konversi. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' -1BCC7.A ' , 16 , 10 ) . PHP_EOL ; // outputs: -113863.625
echo BaseConverter:: baseConvert ( ' -1BCC7.A ' , 16 , 10 , 1 ); // outputs: -113863.6
Metode statis hanyalah pembungkus yang mudah digunakan untuk membuat instance BaseConvert
dan memanggil metode setPrecision()
dan convert()
. Jika Anda perlu mengonversi beberapa angka, akan lebih efisien jika memanggil objek dengan cara yang tidak statis. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
$ converter = new BaseConverter ( 16 , 10 );
echo $ converter -> convert ( ' A37334 ' ) . PHP_EOL ; // outputs: 10711860
echo $ converter -> convert ( ' -1BCC7.A ' ) . PHP_EOL ; // outputs: -113863.625
$ converter -> setPrecision ( 1 );
echo $ converter -> convert ( ' -1BCC7.A ' ); // outputs: -113863.6
Jika nomor yang diberikan berisi digit tidak valid yang bukan merupakan bagian dari basis nomor yang ditentukan, metode ini akan mengembalikan nilai false.
Meskipun perpustakaan ini mendukung konversi pecahan, penting untuk dipahami bahwa pecahan tidak selalu dapat dikonversi secara akurat dari basis bilangan ke basis bilangan lainnya dengan cara yang sama seperti bilangan bulat dapat dikonversi. Hal ini disebabkan karena tidak semua pecahan dapat direpresentasikan dalam basis bilangan lain.
Sebagai contoh, katakanlah kita mempunyai angka 0,1 dalam basis 3. Angka ini sama dengan 1/3 dalam basis 10. Namun, jika Anda merepresentasikan 1/3 sebagai angka desimal, Anda akan mendapatkan pengulangan tak terhingga '0,3333. ..'. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 ) . PHP_EOL ; // outputs: 0.33
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 , 6 ) . PHP_EOL ; // outputs: 0.333333
echo BaseConverter:: baseConvert ( ' 0.1 ' , 3 , 10 , 12 ); // outputs: 0.333333333333
Karena perilaku ini, dimungkinkan untuk menyetel presisi yang digunakan untuk konversi pecahan yang tidak akurat. Seperti terlihat pada contoh sebelumnya, nilai presisi menentukan jumlah digit maksimum pada angka yang dihasilkan. Namun, hasilnya mungkin memiliki digit yang lebih sedikit jika angka tersebut dapat dikonversi secara akurat menggunakan sejumlah kecil digit. Ketepatannya juga dapat diabaikan sepenuhnya, jika pengonversi mengetahui, bahwa ia dapat mengonversi pecahan secara akurat.
Nilai presisi juga memiliki definisi alternatif. Jika ketelitiannya 0 atau bilangan negatif, maka jumlah digit maksimum pada bilangan yang dihasilkan didasarkan pada ketelitian bilangan aslinya. Jika presisinya 0, bilangan yang dihasilkan akan memiliki digit sebanyak yang diperlukan untuk merepresentasikan bilangan tersebut dengan presisi yang sama dengan bilangan aslinya. Angka negatif hanya akan menambah jumlah digitnya. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 0.A7 ' , 16 , 10 , 0 ) . PHP_EOL ; // outputs: 0.652
echo BaseConverter:: baseConvert ( ' 0.A7 ' , 16 , 10 , - 2 ); // outputs: 0.65234
Pada contoh sebelumnya, bilangan asli adalah 0.A7
dengan basis 16. Bilangan berbasis 16 dengan dua digit pada bagian pecahannya dapat mewakili suatu bilangan hingga ketelitian 1/(16 * 16) == 1/256
. Untuk merepresentasikan bagian pecahan dengan ketelitian yang sama pada basis 10, kita memerlukan minimal 3 digit, karena dua digit hanya dapat merepresentasikan bilangan hingga ketelitian 1/100
.
Nilai presisi default yang digunakan oleh perpustakaan adalah -1
. Penting juga untuk dicatat bahwa digit terakhir tidak dibulatkan (karena dalam beberapa kasus hal ini akan menyebabkan hasil yang tidak konsisten).
Untuk membuat interaksi pengguna dengan perpustakaan lebih nyaman, perpustakaan memperlakukan semua nomor dengan cara yang tidak peka huruf besar/kecil, kecuali basis nomor melarang hal tersebut. Misalnya, basis 16 dapat diperlakukan dengan cara yang tidak peka huruf besar/kecil, karena hanya mendefinisikan nilai untuk digit 0-9A-F
. Namun, basis 62 tidak dapat diperlakukan dengan cara yang tidak peka huruf besar/kecil, karena huruf seperti A
dan a
memiliki nilai yang berbeda.
Angka yang dikembalikan akan selalu mengikuti huruf besar/kecil yang ditentukan oleh basis angka. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 7BFA11 ' , 16 , 12 ) . PHP_EOL ; // outputs: 2879B29
echo BaseConverter:: baseConvert ( ' 7bfa11 ' , 16 , 12 ); // outputs: 2879B29
Salah satu fitur perpustakaan ini adalah memungkinkan penyesuaian basis angka yang jauh lebih baik daripada base_convert()
. Dalam kebanyakan kasus, Anda mungkin akan menentukan basis bilangan menggunakan bilangan bulat sederhana seperti 10
atau 16
. Namun, tidak ada batasan ukuran bilangan bulat tersebut. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 7F ' , 16 , 1024 ) . PHP_EOL ; // outputs: #0127
echo BaseConverter:: baseConvert ( ' 5Glm1z ' , 64 , 512 ); // outputs: #456#421#310#371
Namun, untuk basis bilangan besar, digit hanya diwakili oleh string yang terdiri dari #
dan nilai digit tersebut. Setiap kali basis bilangan ditentukan menggunakan bilangan bulat, digitnya mengikuti aturan berikut:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
#
dan nilai digit tersebut (panjang string tergantung pada nilai digit terbesar). Selain menentukan basis bilangan menggunakan bilangan bulat, Anda juga dapat menentukan basis bilangan menggunakan string. Setiap karakter dalam string mewakili sebuah digit dan posisi setiap karakter mewakili nilainya. Basis 16, misalnya, dapat didefinisikan sebagai 0123456789ABCDEF
. Mendefinisikan basis bilangan dengan cara ini juga memudahkan untuk mendapatkan hasil bilangan dalam kasus tertentu. Misalnya:
<?php
require ' vendor/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 101100011101 ' , ' 01 ' , 16 ) . PHP_EOL ; // outputs: B1D
echo BaseConverter:: baseConvert ( ' 101100011101 ' , 2 , ' 0123456789abcdef ' ); // outputs: b1d
Ada juga cara ketiga untuk mendefinisikan basis bilangan menggunakan array. Hal ini memungkinkan penyesuaian yang lebih besar dalam hal basis nomor. Setiap nilai dalam array mewakili satu digit dan indeks menunjukkan nilainya. Misalnya:
<?php
require ' src/autoload.php ' ;
use Riimu Kit BaseConversion BaseConverter ;
echo BaseConverter:: baseConvert ( ' 22 ' , 10 , [ ' nil ' , ' one ' ]) . PHP_EOL ; // outputs: oneniloneonenil
echo BaseConverter:: baseConvert ( ' 187556 ' , 10 , [ ' - ' , ' -! ' , ' -" ' , ' -# ' , ' -¤ ' , ' -% ' ]); // outputs: -¤---¤-!-%-"
Perpustakaan ini adalah Hak Cipta (c) 2013-2017 Riikka Kalliomäki.
Lihat LISENSI untuk informasi lisensi dan penyalinan.