function translateToWords($number) { /***** * A recursive function to turn digits into words * Numbers must be integers from -999,999,999,999 to 999,999,999,999 inclussive. * * (C) 2010 Peter Ajtai * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * See the GNU General Public License: <http://www.gnu.org/licenses/>. * */ // zero is a special case, it cause problems even with typecasting if we don't deal with it here $max_size = pow(10,18); if (!$number) return "zero"; if (is_int($number) && $number < abs($max_size)) { switch ($number) { // set up some rules for converting digits to words case $number < 0: $prefix = "negative"; $suffix = translateToWords(-1*$number); $string = $prefix . " " . $suffix; break; case 1: $string = "یک"; break; case 2: $string = "دو"; break; case 3: $string = "سی"; break; case 4: $string = "چهار"; break; case 5: $string = "پنج"; break; case 6: $string = "شش"; break; case 7: $string = "هفت"; break; case 8: $string = "هشت"; break; case 9: $string = "9"; break; case 10: $string = "ده"; break; case 11: $string = "یازده"; break; case 12: $string = "دوازده"; break; case 13: $string = "سیزده"; break; case 14: $string = "چهارده"; break; case 15: $string = "پانزده"; break; case 16: $string = "شانزده"; break; case 17: $string = "هفده"; break; case 18: $string = "هجده"; break; case 19: $string = "نونزده"; break; case 20: $string = "بیست"; break; case 30: $string = "سی"; break; case 40: $string = "چهل"; break; case 50: $string = "پنجاه"; break; case 60: $string = "شصت"; break; case 70: $string = "هغتاد"; break; case 80: $string = "هشتاد"; break; case 90: $string = "نود"; break; case $number < 100: $prefix = translateToWords($number-$number%10); $suffix = translateToWords($number%10); $string = $prefix . " و " . $suffix; break; // handles all number 100 to 999 case $number < pow(10,3): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,2)))) . "صد"; if ($number%pow(10,2)) $suffix = " و " . translateToWords($number%pow(10,2)); $string = $prefix . $suffix; break; case $number < pow(10,6): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,3)))) . " هزار"; if ($number%pow(10,3)) $suffix = translateToWords($number%pow(10,3)); $string = $prefix . " " . $suffix; break; case $number < pow(10,9): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,6)))) . " میلیون"; if ($number%pow(10,6)) $suffix = translateToWords($number%pow(10,6)); $string = $prefix . " " . $suffix; break; case $number < pow(10,12): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,9)))) . " میلیارد"; if ($number%pow(10,9)) $suffix = translateToWords($number%pow(10,9)); $string = $prefix . " " . $suffix; break; case $number < pow(10,15): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,12)))) . " تیلیارد"; if ($number%pow(10,12)) $suffix = translateToWords($number%pow(10,12)); $string = $prefix . " " . $suffix; break; // Be careful not to pass default formatted numbers in the quadrillions+ into this function // Default formatting is float and causes errors case $number < pow(10,18): // floor return a float not an integer $prefix = translateToWords(intval(floor($number/pow(10,15)))) . " quadrillion"; if ($number%pow(10,15)) $suffix = translateToWords($number%pow(10,15)); $string = $prefix . " " . $suffix; break; } } else { echo "ERROR with - $number<br/> Number must be an integer between -" . number_format($max_size, 0, ".", ",") . " and " . number_format($max_size, 0, ".", ",") . " exclussive."; } return $string; }