Forum
Local stringvar array Birler := ["BİR", "İKİ", "ÜÇ", "DÖRT", "BEŞ", "ALTI", "YEDİ", "SEKİZ", "DOKUZ"];
Local stringvar array Onlar := ["ON", "YİRMİ", "OTUZ", "KIRK", "ELLİ", "ALTMIŞ", "YETMİŞ", "SEKSEN", "DOKSAN"];
Local stringvar array Yuzler := ["BİN", "MİLYON", "MİLYAR", "TRİLYON", "TRİLYAR"];
Stringvar YaziIle;
numbervar deger;
numbervar deger000;
Numbervar Uzunluk;
Numbervar I;
Numbervar K;
Numbervar j;
stringvar ssayi;
Numbervar lSayi;
numbervar deneme:=1163.94;
sSayi := sSayi := CStr (abs(int(deneme)), 0 , "");
YaziIle := "";
Uzunluk := Len(sSayi);
For I := 1 To Uzunluk do
(
deger := cdbl(Mid(sSayi, I, 1));
J := Uzunluk - I + 1;
K := J Mod 3 ;
Select K
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Case 0 :
(
deger000 := cdbl(Mid(sSayi, I, 3));
If deger000 = 0 Then
I := I + 2;
//Else
If deger <> 0 and deger000 <> 0 Then
If deger = 1 Then
YaziIle := YaziIle + "YÜZ"
Else
YaziIle := YaziIle + Birler[deger] + "YÜZ"
);
);
YaziIle := YaziIle & " TL ";
lSayi := 100 * (deneme - round(deneme,0));
if lSayi < 0 then
lSayi := 100 - (-1 * lSayi);
sSayi := CSTR(lSayi, 0,"");
Uzunluk := Len(sSayi);
For I := 1 To Uzunluk do
(
deger := cdbl(Mid(sSayi, I, 1));
J := Uzunluk - I + 1;
K := J Mod 3 ;
Select K
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Case 0 :
(
deger000 := cdbl(Mid(sSayi, I, 3));
If deger000 = 0 Then
I := I + 2;
//Else
If deger <> 0 and deger000 <> 0 Then
If deger = 1 Then
YaziIle := YaziIle + "YÜZ"
Else
YaziIle := YaziIle + Birler[deger] + "YÜZ"
);
);
YaziIle := YaziIle & "";
arkadaşlar crystal raporda rakamı yazıya çevirmek için bu sitede böyle
bir fonksiyon buldum fakat bu fonksiyonda 1500 rakamı çevireceği zaman
birbinbeşyüz olarak çeviriyor bu hatayı nasıl düzeltebilirim?
birbinbeşyüz ifadesi şu kod esnasında oluşuyor.
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
dolayısla Yuzler[K] dan önce Yazille eğer bir ise o satırı
YaziIle := Yuzler[K];
şeklinde yazmanız çözüm olabilir.
Ferhat Karataş
fkaratas.com
Ferhat Bey söylediğiniz gibi yaptım fakat yine değişen birşey olmadı başka yol veya başka çözümü var mıdır şimdiden teşekkür ederim
Bulabildiğim tek kaynak burası olduğu için konuyu hortlatsamda ÇÖZÜM bulduğum için yazıyorum.
yukarıdaki ilk case 1 deki
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
kırmızı ile yazdığım yere şunu yazın ben sorunumu bu şekilde çözdüm.
(if deger = 1 then "" else yaziIle)
Anlamı: eğer 1 görürsen boş bırak sonrası için "İKİ" "ÜÇ" "DÖRT" yazmaya devam ediyor.
Yani son hali şu şekilde olacak. Parantezler dahil.
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := (if deger = 1 then "" else yaziIle) + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Ben çok uğraştım ve ilk defa bir foruma yazıyorum. Çünkü başka yerde cevap yok.