Buğra Şıkel
PHP ile Sayısal Para Değerinin Okunuşunu Yazdırmak

Merhabalar, bu yazımızda bir para miktarı girildiğinde bunun okunuşunu ya da yazılışı da diyebiliriz, bize çıktı olarak verecek bir php fonksiyonu yazacağız. Türkçe bir şekilde bize sonucu döndürecek. Bir muhasebe yazılımı için ihtiyacım olduğundan internette yaptığım araştırmalarda istediğim gibi çalışan bu tarz bir fonksiyona ulaşamadım. Bu sebeple bir fonksiyon oluşturdum. Fonksiyonumuza örnek girdi olarak 12491409.23 girdisini verdiğimizde bize çıktı olarak OnİkiMilyonDörtYüzDoksanBirBinDörtYüzDokuzTürkLirasıYirmiÜçKuruş bu şekilde dönüş yapmakta.
Sayısal para değerlerinin okunuşunu yazdırma işlemi ya da php sayıyı yazıya çevirme fonksiyonu, PHP programlama dili ile gerçekleştirilebilir. Bu yöntem sayesinde, sayısal değerlerin okunuşunu otomatik olarak oluşturarak, zaman ve emek tasarrufu sağlanır. Eğer siz de PHP ile sayısal para değerlerinin okunuşunu yazdırmak istiyorsanız, doğru adrestesiniz.
Fonksiyonumuz şu şekildedir:
/**
* @param $number
* @param string $currency
* @param string $doit
* @return string
*/
function moneyToText($number, string $currency = 'TürkLirası', string $doit = 'Kuruş'): string
{
$maxSupportedNumber = 999999999999.99;
($number > $maxSupportedNumber) ? exit("Girmiş olduğunuz sayı desteklenmemektedir.") : "";
//Sayılarımızın karşılıklarını tanımlıyoruz.
$numbers = [
0 => '',
1 => "Bir",
2 => "İki",
3 => "Üç",
4 => "Dört",
5 => "Beş",
6 => "Altı",
7 => "Yedi",
8 => "Sekiz",
9 => "Dokuz",
10 => "On",
20 => "Yirmi",
30 => "Otuz",
40 => "Kırk",
50 => "Elli",
60 => "Altmış",
70 => "Yetmiş",
80 => "Seksen",
90 => "Doksan"
];
$number = number_format($number,2); // Sayımızı formatlıyoruz.
$coins = explode('.', $number); // formattan sonra . dan parçalıyoruz.
$money = $coins[0]; // burada ana paramızı alıyoruz
$coins = last($coins); // burada ise kuruşlu kısmı
if ($coins == '00'){ //eğer kuruş 00 gelirse hiç yazdırmıyoruz
$penny = '';
$doit = '';
}else { // 00 gelmezse karşılığında hangi değer geldiğini yazdırıyoruz.
$coins = str_split($coins);
foreach ($coins as $key => $s){
if ($key == 0){
$coins[0] = $s*10;
}
}
$penny = $numbers[$coins[0]].$numbers[$coins[1]];
}
$money = str_replace(',','',$money);
$expMoney = array_reverse(str_split($money));
foreach ($expMoney as $key => $m){
if ($key == 10){
$new[] = $m*10;
}elseif ($key == 7){
$new[] = $m*10;
}elseif ($key == 4){
$new[] = $m*10;
}elseif ($key == 1){
$new[] = $m*10;
}else {
$new[] = $m;
}
}
foreach ($new as $n)
{
$text[] = $numbers[$n];
}
// burada ise artık ana paranın gerekli karşılıklarını almaya başlıyoruz
foreach ($text as $key => $t){
if ($key == 2 && $t != ''){
$text[2] = $t.'Yüz';
}elseif ($key == 3){
if ($t == 'Bir' && count($text)==4){
$text[3] = 'Bin';
}else {
$text[3] = $t.'Bin';
}
}elseif ($key == 5){
if ($t == 'Bir'){
$text[5] = 'Yüz';
}else {
$text[5] = $t.'Yüz';
}
}elseif ($key == 6){
$text[6] = $t.'Milyon';
}elseif ($key == 8){
if ($t == 'Bir'){
$text[8] = 'Yüz';
}else {
$text[8] = $t.'Yüz';
}
}elseif ($key == 9){
$text[9] = $t.'Milyar';
}elseif ($key == 11){
if ($t == 'Bir'){
$text[11] = 'Yüz';
}else {
$text[11] = $t.'Yüz';
}
}
}
//başlangıçta çevirdiğimiz diziyi tekrar eski haline getiriyoruz ve birleştiriyoruz.
$text = implode('',array_reverse($text));
//dönüş için gerekli eklemeleri yapıyoruz.
return $text.$currency.$penny.$doit;
}
Bu fonksiyon 999,999,999,999.99 sayısına kadar çalışmaktadır. Yani Trilyon cinsinden bir parayı çeviremez, gerekli bir kaç değişiklikle trilyon ve çok daha fazlasını değiştirmemizi sağlayacak hale getirilebilir.
Bu ve benzeri önemli ipuçlarını öğrenmek için diğer yazılarıma da göz atabilirsiniz.
Bunları da beğenebilirsiniz

Isaac Asimov “The Last Question” [Türkçe]
Bu metin Isaac Asimov tarafından 1956 yılında yayımlanmış “The Last Question” adlı kısa hikayenin Türkçeleştirilmiş ve temel özellikleri korunarak sadeleştirilmiş versiyonudur. Gidişata bakılırsa Asimov’un tahminlerinden…
Devamını Oku

Asenkron İş Kuyruklarında RabbitMQ Yerine Kafka Ne Zaman Seçilmeli: Mimari Değerlendirme Çerçevesi
50.000+ mesaj/saniye yük altındaki dağıtık sistemlerde mesajlaşma altyapısı seçimi. RabbitMQ ve Kafka’nın p99 metrikleri, tüketici mimarileri ve trade-off analizi.
Devamını Oku

Kritik Sistemlerde Teknik Borcu Azaltmak: Yapay Zeka Ajanları ile Mimari Refactoring
Bu blog yazısı, kritik sistemlerde biriken teknik borcun yarattığı zorlukları ve bu sorunla mücadelede yapay zeka ajanlarının repo düzeyinde mimari refactoring süreçlerine nasıl entegre edilebileceğini derinlemesine inceliyor. Teknik borcu azaltmak, sistem performansını artırmak ve geliştirme süreçlerini hızlandırmak için yenilikçi stratejiler sunulmaktadır.
Devamını Oku