Faturalar üzerine çalışanların ihtiyaç duyacağı bir işlemdir php sayıyı yazıya çevirme. Php sayıyı yazıya çevirmek için aşağıdaki kodları kullanabilirsiniz.
Örnek olarak 56.05TL olan bir sayıyı PHP sayesinde yazı olarak çevirip “Elli Altı Türk Lirası Beş Kuruş” olarak yazdırabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | < ?php $yaziyla = sayiyiYaziyaCevir(123456.78, 2, "Türk Lirası", "Kuruş", "", null, null, null); #yüzyirmiüçbindörtyüzellialtı TL altmışyedi Kr# echo(sayiyiYaziyaCevir("123456.78",2,"Türk Lirası","Kuruş","",null,null,null)); function sayiyiYaziyaCevir($sayi, $kurusbasamak, $parabirimi, $parakurus, $diyez, $bb1, $bb2, $bb3) { // kurusbasamak virgülden sonra gösterilecek basamak sayısı // parabirimi = TL gibi , parakurus = Kuruş gibi // diyez başa ve sona kapatma işareti atar # gibi $b1 = array("", "Bir ", "İki ", "Üç ", "Dört ", "Beş ", "Altı ", "Yedi ", "Sekiz ", "Dokuz "); $b2 = array("", "On ", "Yirmi ", "Otuz ", "Kırk ", "Elli ", "Altmış ", "Yetmiş ", "Seksen ", "Doksan "); $b3 = array("", "Yüz ", "Bin ", "Milyon ", "Milyar ", "Trilyon ", "Katrilyon "); if ($bb1 != null) { // farklı dil kullanımı yada farklı yazım biçimi için $b1 = $bb1; } if ($bb2 != null) { // farklı dil kullanımı $b2 = $bb2; } if ($bb3 != null) { // farklı dil kullanımı $b3 = $bb3; } $say1=""; $say2 = ""; // say1 virgül öncesi, say2 kuruş bölümü $sonuc = ""; $sayi = str_replace(",", ".",$sayi); //virgül noktaya çevrilir $nokta = strpos($sayi,"."); // nokta indeksi if ($nokta>0) { // nokta varsa (kuruş) $say1 = substr($sayi,0, $nokta); // virgül öncesi $say2 = substr($sayi,$nokta, strlen($sayi)); // virgül sonrası, kuruş } else { $say1 = $sayi; // kuruş yoksa } $son; $w = 1; // işlenen basamak $sonaekle = 0; // binler on binler yüzbinler vs. için sona bin (milyon,trilyon...) eklenecek mi? $kac = strlen($say1); // kaç rakam var? $sonint; // işlenen basamağın rakamsal değeri $uclubasamak = 0; // hangi basamakta (birler onlar yüzler gibi) $artan = 0; // binler milyonlar milyarlar gibi artışları yapar $gecici; if ($kac > 0) { // virgül öncesinde rakam var mı? for ($i = 0; $i < $kac; $i++) { $son = $say1[$kac - 1 - $i]; // son karakterden başlayarak çözümleme yapılır. $sonint = $son; // işlenen rakam Integer.parseInt( if ($w == 1) { // birinci basamak bulunuyor $sonuc = $b1[$sonint] . $sonuc; } else if ($w == 2) { // ikinci basamak $sonuc = $b2[$sonint] . $sonuc; } else if ($w == 3) { // 3. basamak if ($sonint == 1) { $sonuc = $b3[1] . $sonuc; } else if ($sonint > 1) { $sonuc = $b1[$sonint] . $b3[1] . $sonuc; } $uclubasamak++; } if ($w > 3) { // 3. basamaktan sonraki işlemler if ($uclubasamak == 1) { if ($sonint > 0) { $sonuc = $b1[$sonint] . $b3[2 + $artan] . $sonuc; if ($artan == 0) { // birbin yazmasını engelle $sonuc = str_replace($b1[1] . $b3[2], $b3[2],$sonuc); } $sonaekle = 1; // sona bin eklendi } else { $sonaekle = 0; } $uclubasamak++; } else if ($uclubasamak == 2) { if ($sonint > 0) { if ($sonaekle > 0) { $sonuc = $b2[$sonint] . $sonuc; $sonaekle++; } else { $sonuc = $b2[$sonint] . $b3[2 + $artan] . $sonuc; $sonaekle++; } } $uclubasamak++; } else if ($uclubasamak == 3) { if ($sonint > 0) { if ($sonint == 1) { $gecici = $b3[1]; } else { $gecici = $b1[$sonint] . $b3[1]; } if ($sonaekle == 0) { $gecici = $gecici . $b3[2 + $artan]; } $sonuc = $gecici . $sonuc; } $uclubasamak = 1; $artan++; } } $w++; // işlenen basamak } } // if(kac>0) if ($sonuc=="") { // virgül öncesi sayı yoksa para birimi yazma $parabirimi = ""; } $say2 = str_replace(".", "",$say2); $kurus = ""; if ($say2!="") { // kuruş hanesi varsa if ($kurusbasamak > 3) { // 3 basamakla sınırlı $kurusbasamak = 3; } $kacc = strlen($say2); if ($kacc == 1) { // 2 en az $say2 = $say2."0"; // kuruşta tek basamak varsa sona sıfır ekler. $kurusbasamak = 2; } if (strlen($say2) > $kurusbasamak) { // belirlenen basamak kadar rakam yazılır $say2 = substr($say2,0, $kurusbasamak); } $kac = strlen($say2); // kaç rakam var? $w = 1; for ($i = 0; $i < $kac; $i++) { // kuruş hesabı $son = $say2[$kac - 1 - $i]; // son karakterden başlayarak çözümleme yapılır. $sonint = $son; // işlenen rakam Integer.parseInt( if ($w == 1) { // birinci basamak if ($kurusbasamak > 0) { $kurus = $b1[$sonint] . $kurus; } } else if ($w == 2) { // ikinci basamak if ($kurusbasamak > 1) { $kurus = $b2[$sonint] . $kurus; } } else if ($w == 3) { // 3. basamak if ($kurusbasamak > 2) { if ($sonint == 1) { // 'biryüz' ü engeller $kurus = $b3[1] . $kurus; } else if ($sonint > 1) { $kurus = $b1[$sonint] . $b3[1] . $kurus; } } } $w++; } if ($kurus=="") { // virgül öncesi sayı yoksa para birimi yazma $parakurus = ""; } else { $kurus = $kurus . " "; } $kurus = $kurus . $parakurus; // kuruş hanesine 'kuruş' kelimesi ekler } $sonuc = $diyez . $sonuc . " " . $parabirimi . " " . $kurus . $diyez; return $sonuc; } ?> |
Kodları direk olarak indirmek için aşağıdaki linke tıklayın.
merhaba bunu nasıl kullanacağız ne yaptıysam hata verdi ?
Mansur bey yorumunuzdan sonra kontrol sağladım, kodlar çalışıyor.
Editörden kopyaladıysanız çalışmama ihtimali var, yazının en altında link olarak eklidir, ordan indirip kullanabilirsiniz.
Teşekkürler yorum için hallettim script taglari içine aldığımdan hata almışım
hocam selamlar,
sayıyı yazıya çevirme kodunuzla ilgili bir şey sormak istiyorum mümkünse.
echo $total[‘value’];
ile gösterdiğim rakamsal fiyat bilgisini sizin kodunuzla nasıl birleştirebilirim acaba.
saygılar
Ziya bey aşağıdaki gibi kullanabilirsiniz.
echo(sayiyiYaziyaCevir($total[‘value’],2,”Türk Lirası”,”Kuruş”,””,null,null,null));
bu şekilde kullandığınızda $total[‘value’] den gelen değer yazıya çevrilecektir.
teşekkür ederim çalıştı evet yazıya çevirdi ama ufak bir sorun var. şöyle ki;
tutar ne olursa olsun yanına Seksen Üç Yedi Yüz Seksen ekliyor. Acaba başka bir karakter daha mı okuyor. 45 liranın hemen yanında da yeni TL simgesi var. (klavyeden yapamadım.)
bunu şöyle çeviriyor: Kırk Beş Seksen Üç Yedi Yüz Seksen.
Kodlarda veya gelen sonuçta sorun olabilir, incelenmesi gerekir.
82. satır
if ($artan == 0) {
yerine
if (($artan == 0) and ($kac==4)) {
şeklinde olması gerekiyor aksi takdir de 101200 de hata verir
Bilgi için teşekkürler.
TEŞEKKÜR EDERİM. MÜŞTERİLERİME CARİ BİLGİLERİ YOLLARKEN ÇOK İŞİME YARADI. TAHSİLAT MAKBUZU VE CARİ BORÇLARINDA KULLANIYORUM SORUNSUZ ÇALIŞIYOR.