Skip to content

Instantly share code, notes, and snippets.

@vonqo
Last active March 31, 2020 12:34
Show Gist options
  • Save vonqo/44cff28c1db9d3a49697b9d19eb65671 to your computer and use it in GitHub Desktop.
Save vonqo/44cff28c1db9d3a49697b9d19eb65671 to your computer and use it in GitHub Desktop.
Number to text mongolia
/**
* Тоог уншигдах байдлаар нь бичих
* Жишээ нь: 1996 = мянга есөн зуун ерөн зургаа
*
* @param str Тоо бүхий текст
* @return уншигдахгүйц тест
*/
public static String numberToText(String word){
char[] chars = word.toCharArray();
int divider = chars.length / 3;
int remainder = chars.length % 3;
StringBuilder builder = new StringBuilder();
if(remainder != 0){
boolean tmp = (remainder == 1);
builder.append(sayNumber(chars[0], remainder,tmp));
if(!tmp) builder.append(sayNumber(chars[1], 1, false));
builder.append(getLevel(divider*3,tmp));
}
for(int i = 1; i <= divider; i++){
boolean tmp = false;
int indexer = remainder+i*3;
if(chars[indexer-2] == '0' && chars[indexer-1] == '0' && divider == i){
tmp = true;
}
builder.append(sayNumber(chars[indexer-3], 1, tmp));
if(chars[indexer-3] != '0')
builder.append(getLevel(2,tmp));
tmp = (i == divider);
builder.append(sayNumber(chars[indexer-2], 2, tmp && chars[indexer-1] == '0'));
builder.append(sayNumber(chars[indexer-1], 1, tmp));
builder.append(getLevel(chars.length-indexer,false));
}
return builder.toString();
}
/**
* numberToText методын тайлбарын уншина уу
* монгол хэлэнд тоог орноор нь гурав гураваар нь тасалж хэлдэгийн аравтын орон
*
* @param number тоо
* @param len тоон дараалал дунд ямар байршилд байгаа эсэх
* @param isEnd ард нь тэгээс өөр тоо байгаа эсэх
* @return уншигдахгүйц тест
*/
private static String sayNumber(char number, int len, boolean isEnd){
String numberTxt = null;
switch(number){
case '0':
numberTxt = "";
break;
case '1':
if(len == 1) numberTxt = "нэг ";
if(len == 2)
if(isEnd) numberTxt = "арав ";
else numberTxt = "арван ";
break;
case '2':
if(len == 1) numberTxt = "хоёр ";
if(len == 2)
if(isEnd) numberTxt = "хорь ";
else numberTxt = "хорин ";
break;
case '3':
if(len == 1)
if(isEnd) numberTxt = "гурав ";
else numberTxt = "гураван ";
if(len == 2)
if(isEnd) numberTxt = "гуч ";
else numberTxt = "гучин ";
break;
case '4':
if(len == 1)
if(isEnd) numberTxt = "дөрөв ";
else numberTxt = "дөрөвөн ";
if(len == 2)
if(isEnd) numberTxt = "дөч ";
else numberTxt = "дөчин ";
break;
case '5':
if(len == 1)
if(isEnd) numberTxt = "тав ";
else numberTxt = "таван ";
if(len == 2)
if(isEnd) numberTxt = "тавь ";
else numberTxt = "тавин ";
break;
case '6':
if(len == 1)
if(isEnd) numberTxt = "зургаа ";
else numberTxt = "зургаан ";
if(len == 2)
if(isEnd) numberTxt = "жар ";
else numberTxt = "жаран ";
break;
case '7':
if(len == 1)
if(isEnd) numberTxt = "долоо ";
else numberTxt = "долоон ";
if(len == 2)
if(isEnd) numberTxt = "дал ";
else numberTxt = "далан ";
break;
case '8':
if(len == 1)
if(isEnd) numberTxt = "найм ";
else numberTxt = "найман ";
if(len == 2)
if(isEnd) numberTxt = "ная ";
else numberTxt = "наяан ";
break;
case '9':
if(len == 1)
if(isEnd) numberTxt = "ес";
else numberTxt = "есөн ";
if(len == 2)
if(isEnd) numberTxt = "ер ";
else numberTxt = "ерөн ";
break;
}
return numberTxt;
}
/**
* numberToText методын тайлбарын уншина уу
* монгол хэлэнд тоог орноор нь гурав гураваар нь тасалж хэлдэгийн зуутын орон
*
* @param len тоон дараалал дунд ямар байршилд байгаа эсэх
* @param isEnd ард нь тэгээс өөр тоо байгаа эсэх
* @return уншигдахгүйц тест
*/
private static String getLevel(int len, boolean isEnd){
if(len == 1) return "";
if(len == 2)
if(isEnd) return "зуу ";
else return "зуун ";
if(len == 3) return "мянга ";
if(len == 6) return "сая ";
if(len == 9) return "тэрбум ";
if(len == 12) return "их наяд ";
return "";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment