Starší komentáře ke článku: Převod čísla na slovní vyjádření

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Martin Kopta

Datum vložení: 23.4.2003 9:53:46

Čekal jsem něco o skloňování nebo tak. Tohle mě nenadchlo.

Avatar

Autor komentáře: Mikolas Volek

Datum vložení: 23.4.2003 20:14:53

Program s podobnou funkci jsem nahodou nedavno napsal v Pascalu. Cislo se zadava jako parametr na prikazovem radku. Prevadi se i zaporna cisla. Bohuzel vsak jen v prvnim pade :-]

<a href='http://skoda.wz.cz/ruzne/numword.zip' target='_blank'>http://skoda.wz.cz/ruzne/numword.zip</a>

Avatar

Autor komentáře: kriplozoik

Datum vložení: 29.4.2003 7:55:26

na Realtimu (priloze k GameStar CD) vysel clanek, ktery prevadi cisla az do 10^18, zaporna, desetinna a s rody (jako muzsky, zensky, stredni).

Avatar

Autor komentáře: kriplozoik

Datum vložení: 29.4.2003 8:00:50

btw. rika se `čtyřista` nebo `čtyři sta`? ja bych rekl, ze `čtyři sta`...

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 29.4.2003 10:00:48

Samozřejmě "čtyři sta". Je na to jednoduchá pomůcka: každá část, která se samostatně skloňuje, se také samostatně píše - "bez čtyř set" => "čtyři sta".

Avatar

Autor komentáře: Leoš

Datum vložení: 30.4.2003 9:35:25

Máš na mysli například dvěstě ? :-)
Co je tedy správně ?
dvě stě ... nebo dvěstě ... bez dvou set ... nebo bez dvouset ?

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 30.4.2003 10:13:47

"Bez dvou set" (každé se skloňuje zvlášť) => "dvě stě". Aby se to psalo dohromady, muselo by se to dohromady i skloňovat, tj. něco jako "bez dvěstí". Tvar "bez dvouset" nejde obhájit - žádné slovo se v češtině neskloňuje přidáním koncovky doprostřed slova.

Avatar

Autor komentáře: kriplozoik

Datum vložení: 30.4.2003 12:12:24

abych to uzavrel: z toho tedy vyplyva, ze to je v clanku spatne (nebo ze je jeho autor cizinec, ktery umi plynne cesky, ale jeste mu moc nejdou cislovky :-)).

Avatar

Autor komentáře: m.volek

Datum vložení: 30.4.2003 18:34:22

No, ale na napr. slozenky se musi tyhle cislovky psat mez mezer jako jedno slovo, tzn. treba "pettisicdvestepatnact".

Avatar

Autor komentáře: m.volek

Datum vložení: 2.11.2003 21:24:13

"...žádné slovo se v češtině neskloňuje přidáním koncovky doprostřed slova"
To nemůžete tvrdit, protože já taková slovo znám:
Např. cokoli, bez čehokoli, k čemukoli .... vidíte? skloňování se projeví uprostřed slova. Další: cosi, kdosi, kdokoli, kdokoliv, cokoliv...

Avatar

Autor komentáře: Pavel

Datum vložení: 21.5.2006 10:09:17

Ahoj diky za reakci na clanek. shani prave nec na tento prevod. jak se s tim tvym progamkem pracuje? stranky nejak moc nefunguji mimo znelek z nadrazi :) diky za reakci pavel

Avatar

Autor komentáře: p

Datum vložení: 26.7.2003 6:54:37

Function Slovy3(byval Cislo, byval Jednotky)
' Pomocná funkce pro Slovy()
Dim Temp

Const NUM_DESITKY = "deset|dvacet|třicet|čtyřicet|padesát|šedesát"

If ( ( Int(Right(Cislo, 2)) > 10 ) AND ( Int(Right(Cislo, 2)) < 20 ) ) Then
Temp = Split(Jednotky, "|")(0)
Else
Temp = Split(Jednotky, "|")(Int(Right(Cislo, 1)))
End If

If Cislo > 9 Then
Select Case Int(Mid(Cislo, Len(Cislo) - 1, 1))
Case 1
Select Case Int(Right(Cislo, 2))
Case 10: Temp = "deset" & Temp
Case 11: Temp = "jedenáct" & Temp
Case 12: Temp = "dvanáct" & Temp
Case 13: Temp = "třináct" & Temp
Case 14: Temp = "čtrnáct" & Temp
Case 15: Temp = "patnáct" & Temp
Case 16: Temp = "šestnáct" & Temp
Case 17: Temp = "sedmnáct" & Temp
Case 18: Temp = "osmnáct" & Temp
Case 19: Temp = "devatnáct" & Temp
End Select
Case 2: Temp = "dvacet" & Temp
Case 3: Temp = "třicet" & Temp
Case 4: Temp = "čtyřicet" & Temp
Case 5: Temp = "padesát" & Temp
Case 6: Temp = "šedesát" & Temp
Case 7: Temp = "sedmdesát" & Temp
Case 8: Temp = "osmdesát" & Temp
Case 9: Temp = "devadesát" & Temp
End Select
End If

If Cislo > 99 Then
Select Case Int(Mid(Cislo, Len(Cislo) - 2, 1))
Case 1: Temp = "sto" & Temp
Case 2: Temp = "dvěstě" & Temp
Case 3: Temp = "třista" & Temp
Case 4: Temp = "čtyřista" & Temp
Case 5: Temp = "pětset" & Temp
Case 6: Temp = "šestset" & Temp
Case 7: Temp = "sedmset" & Temp
Case 8: Temp = "osmset" & Temp
Case 9: Temp = "devětset" & Temp
End Select
End If

Slovy3 = Temp
If Temp = Split(Jednotky, "|")(0) Then Slovy3 = ""
End Function

Function Slovy(byVal Cislo)
Dim Temp

Cislo = Right("000000000" & Cislo, 9)

Temp = Slovy3(Right(Cislo, 3), "|jedna|dva|tři|čtyři|pět|šest|sedm|osm|devět")
If Cislo > 999 Then Temp = Slovy3(Mid(Cislo, 4, 3), "tisíc|jedentisíc|dvatisíce|třitisíce|čtyřitisíce|pěttisíc|šesttisíc|sedmtisíc|osmtisíc|devěttisíc") & "" & Temp
If Cislo > 999999 Then Temp = Slovy3(Left(Cislo, 3), "miliónů|jedenmilión|dvamilióny|třimilióny|čtyřimilióny|pětmiliónů|šestmiliónů|sedmmiliónů|osmmiliónů|devětmiliónů") & "" & Temp
If Temp = "" Then Temp = "nula"

Slovy = Temp
End Function

Avatar

Autor komentáře: Ondřej vaniš

Datum vložení: 25.11.2005 16:24:22

V kódu zde publikovaném nejsou podchyceny nejaké výjmky. Zde je kód pro JavaScript. Možnost použít čísla až 999999999999. <SCRIPT LANGUAGE="JavaScript"> <!-- function num2text(value){ return base(part(value,3),3) + mld(part(value,3)) + base(part(value,2),2) + mil(part(value,2)) + base(part(value,1),1) + tis(part(value,1)) + base(part(value,0),0) ; } function part(value,section){ value = value + ""; return value.substring(value.length-3-section*3,value.length-section*3); } function base(value,part){ var outputStr = ""; var dict2 = new Array("deset", "jedenáct", "dvanáct", "třináct", "čtrnáct", "patnáct", "šestnáct", "sedmnáct", "osmnáct", "devatenáct"); var dict = new Array(); dict[0] = new Array("", "jedna", "dva", "tři", "čtyři", "pět", "šest", "sedm", "osm", "devět"); dict[1] = new Array("", "", "dvacet", "třicet", "čtyřicet", "padesát", "šedesát", "sedmdesát", "osmdesát", "devadesát"); dict[2] = new Array("", "sto", "dvěstě", "třista", "čtyřista", "pětset", "šestset", "sedmset", "osmset", "devětset"); for (var x=0; x <= value.length-1; x++) { if ((x == value.length-2) && (value.charAt(x)=="1")) { outputStr += dict2[value.charAt(x+1)]; break; } else { if (part == 1 && value.charAt(x)=="1" && x == value.length-1){ outputStr += "jeden"; // výjmka jeden tisíc } else if (part == 2 && value.charAt(x)=="1" && x == value.length-1){ outputStr += "jeden"; // výjmka jeden milion } else if (part == 3 && value.charAt(x)=="2" && x == value.length-1){ outputStr += "dvě"; // výjmka dvě miliardy } else { outputStr += dict[value.length-1-x][value.charAt(x)]; } } } return outputStr; } function tis(value){ value = value - 0; var appendix = new Array("", "tisíc", "tisíce", "tisíce", "tisíce", "tisíc", "tisíc", "tisíc", "tisíc", "tisíc"); if (value<=9) {return appendix[value];} else {return "tisíc";} } function mil(value){ value = value - 0; var appendix = new Array("", "milion", "miliony", "miliony", "miliony", "milionů", "milionů", "milionů", "milionů", "milionů"); if (value<=9) {return appendix[value];} else {return "milionů";} } function mld(value){ value = value - 0; var appendix = new Array("", "miliarda", "miliardy", "miliardy", "miliardy", "miliard", "miliard", "miliard", "miliard", "miliard"); if (value<=9) {return appendix[value];} else {return "miliard";} } window.alert(num2text("1234567890")) //--> </SCRIPT>

Zpět na článek | Úvodní stránka Interval.cz