Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.
 All Data Structures Functions Variables Pages
NumberToWordsUtil.php
1 <?php
2  /*********************************************************************************
3  * Zurmo is a customer relationship management program developed by
4  * Zurmo, Inc. Copyright (C) 2017 Zurmo Inc.
5  *
6  * Zurmo is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  *
13  * Zurmo is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  *
23  * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
24  * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
25  *
26  * The interactive user interfaces in original and modified versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  *
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the Zurmo
32  * logo and Zurmo copyright notice. If the display of the logo is not reasonably
33  * feasible for technical reasons, the Appropriate Legal Notices must display the words
34  * "Copyright Zurmo Inc. 2017. All rights reserved".
35  ********************************************************************************/
36 
43  {
44  public static function convert($number)
45  {
46  $hyphen = '-';
47  $conjunction = ' and ';
48  $separator = ', ';
49  $negative = 'negative ';
50  $decimal = ' point ';
51  $dictionary = array(
52  0 => 'zero',
53  1 => 'one',
54  2 => 'two',
55  3 => 'three',
56  4 => 'four',
57  5 => 'five',
58  6 => 'six',
59  7 => 'seven',
60  8 => 'eight',
61  9 => 'nine',
62  10 => 'ten',
63  11 => 'eleven',
64  12 => 'twelve',
65  13 => 'thirteen',
66  14 => 'fourteen',
67  15 => 'fifteen',
68  16 => 'sixteen',
69  17 => 'seventeen',
70  18 => 'eighteen',
71  19 => 'nineteen',
72  20 => 'twenty',
73  30 => 'thirty',
74  40 => 'fourty',
75  50 => 'fifty',
76  60 => 'sixty',
77  70 => 'seventy',
78  80 => 'eighty',
79  90 => 'ninety',
80  100 => 'hundred',
81  1000 => 'thousand',
82  1000000 => 'million',
83  1000000000 => 'billion',
84  1000000000000 => 'trillion',
85  1000000000000000 => 'quadrillion',
86  1000000000000000000 => 'quintillion'
87  );
88 
89  if (!is_numeric($number))
90  {
91  return false;
92  }
93 
94  if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX)
95  {
96  // overflow
97  trigger_error(
98  'convert only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX,
99  E_USER_WARNING
100  );
101  return false;
102  }
103 
104  if ($number < 0)
105  {
106  return $negative . static::convert(abs($number));
107  }
108 
109  $string = $fraction = null;
110 
111  if (strpos($number, '.') !== false)
112  {
113  list($number, $fraction) = explode('.', $number);
114  }
115 
116  switch (true)
117  {
118  case $number < 21:
119  $string = $dictionary[$number];
120  break;
121  case $number < 100:
122  $tens = ((int) ($number / 10)) * 10;
123  $units = $number % 10;
124  $string = $dictionary[$tens];
125  if ($units)
126  {
127  $string .= $hyphen . $dictionary[$units];
128  }
129  break;
130  case $number < 1000:
131  $hundreds = $number / 100;
132  $remainder = $number % 100;
133  $string = $dictionary[$hundreds] . ' ' . $dictionary[100];
134  if ($remainder)
135  {
136  $string .= $conjunction . static::convert($remainder);
137  }
138  break;
139  default:
140  $baseUnit = pow(1000, floor(log($number, 1000)));
141  $numBaseUnits = (int) ($number / $baseUnit);
142  $remainder = $number % $baseUnit;
143  $string = static::convert($numBaseUnits) . ' ' . $dictionary[$baseUnit];
144  if ($remainder)
145  {
146  $string .= $remainder < 100 ? $conjunction : $separator;
147  $string .= static::convert($remainder);
148  }
149  break;
150  }
151 
152  if (null !== $fraction && is_numeric($fraction))
153  {
154  $string .= $decimal;
155  $words = array();
156  foreach (str_split((string) $fraction) as $number)
157  {
158  $words[] = $dictionary[$number];
159  }
160  $string .= implode(' ', $words);
161  }
162 
163  return $string;
164  }
165  }
166 ?>
Generated on Sat Jul 4 2020 07:10:28
Account Suspended
Account Suspended
This Account has been suspended.
Contact your hosting provider for more information.