Qt/C++ ile Sayları Türkçe Olarak Metine Çevirmek

Fatura diplerinde tutarın metine çevirilmesi gerekiyor. Ben de çıktılar alırken ihtiyaç duydum. Hali ile tam ve ondalık sayı olmak üzere iki kısım olduğu için iki ayrı rakamı da ayrıca sayıya çevirmek gerekiyor.

QString baglanti::yaziyla(double gelenRakam)
{
    int tam;
    double kusur;
    QString takas;

    tam = gelenRakam;
    kusur = gelenRakam - tam;

    takas = QString::number(kusur, 'f', 2);    

    QStringList parca = takas.split(".");

    return yaziyaCevir(tam) + "TL"+yaziyaCevir(parca.last().toInt())+"KRŞ";

}

Yukarıdaki gibi bir fonksiyon ile işe başlıyoruz. Burada sayı tam ve ondalık kısmına ayrılıyor ve ayrı ayrı metine çevriliyor.

QString baglanti::yaziyaCevir(int gelenInt)
{
    QString birlik[10] = {"", "BİR", "İKİ", "ÜÇ", "DÖRT", "BEŞ", "ALTI", "YEDİ", "SEKİZ", "DOKUZ"};
    QString onluk[10] = {"", "ON", "YİRMİ", "OTUZ", "KIRK", "ELLİ", "ALTMIŞ", "YETMİŞ", "SEKSEN", "DOKSAN"};
    QString yuzluk[10] = {"", "YÜZ", "İKİYÜZ", "ÜÇYÜZ", "DÖRTYÜZ", "BEŞYÜZ", "ALTIYÜZ", "YEDİYÜZ", "SEKİZYÜZ", "DOKUZYÜZ"};
    QString bolum[11] = {"BİN", "MİLYON", "MİLYAR", "TRİLYON", "KATRİLYON", "KENTİLYON", "SEKSTİLYON", "SEPTİLYON", "OKTİLYON", "NONİLYON", "DESİLYON"};



    QString gelenMetin = QString::number(gelenInt);

    QString sonuc="";

    int basamak = 1;
    int bol = 0;


    for (int i = gelenMetin.length();i>0;i--) { 

        switch (basamak) {
        case 1:            
            sonuc = birlik[gelenMetin.mid(i-1,1).toInt()] + sonuc;            
            break;
        case 2:
            sonuc = onluk[gelenMetin.mid(i-1,1).toInt()] + sonuc;            
            break;
        case 3:
            sonuc = yuzluk[gelenMetin.mid(i-1,1).toInt()] + sonuc;            
            break;
        }

        basamak = basamak +1;

        if(basamak > 3)
        {
            if(i!=1) sonuc = bolum[bol]+sonuc;
            basamak=1;
            bol=bol+1;
        }

    }

    return sonuc;
}

Burada rakamı binlik bölümlerine yani üçlü bölümlerine ayrılarak yazıya çevirdim. Sadece 1000’de sıkıntı var! “BİRBİN” yazıyor… 🙂

Valla çok kasmadım! O kadarı kadı kızında da olur. Yoğunluğum biraz azaldığında çaresine bakacağım. Şu an için bu kadar kodu yazabilmek için harcadığım zaman bile lüks… 🙂

Bu yazı Programlama kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kodu girin... *