52 lines (42 with data), 1.4 kB
/*
* lib/fraction.c
* Copyright Shattered World mudlib
*
* Fraction-related functions.
*/
inherit "RO/Servers";
array Numbers = [
"one", "two", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "thirty", "forty", "fifty", "sixty", "seventy",
"eighty", "ninety", "hundred", "thousand", "million"
];
array Replacers = [
"first", "half", "third", "fourth", "fifth", "sixth", "seventh",
"eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth",
"fourteenth", "fifteenth", "sixteenth", "seventeenth",
"eighteenth", "nineteenth", "twentieth", "thirtieth",
"fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth",
"ninetieth", "hundredth", "thousandth", "millionth"
];
reset()
{
}
/* For a negative fraction only Num can be negative. */
string
fraction_to_english(int Num,int Den)
{
int Last;
string StrDen, StrNum;
array ArrDen;
if (Den < 2)
return ENGLISH->int_to_english(Num, -1);
StrNum = ENGLISH->int_to_english(Num, -1);
StrDen = ENGLISH->int_to_english(Den, -1);
ArrDen = explode(StrDen, " ");
Last = sizeof(ArrDen) - 1;
ArrDen[Last] = Replacers[index(Numbers, ArrDen[Last])];
StrDen = implode(ArrDen, " ");
return StrNum + "-" + (Num > 1 ? StrDen + "s": StrDen);
}