//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Число в строку
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static public function numberInWords( $_number, $_gender = 'masculine' )
{
// Всякие константы
$triadsInfo = array
(
1 => array
(
'gender' => 'feminine',
'forms' => array('тысяча', 'тысячи', 'тысяч')
),
2 => array
(
'gender' => 'masculine',
'forms' => array('миллион', 'миллиона', 'миллионов')
),
3 => array
(
'gender' => 'masculine',
'forms' => array('миллиард', 'миллиарда', 'миллиардов')
),
4 => array
(
'gender' => 'masculine',
'forms' => array('триллион', 'триллиона', 'триллионов')
)
);
$stringsX = array
(
'masculine' => array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'),
'neuter' => array('', 'одно', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'),
'feminine' => array('', 'одна', 'две', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять')
);
$stringsX0 = array('', '', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
$stringsX00 = array('', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
$strings10to19 = array(10 => 'десять', 11 => 'одиннадцать', 12 => 'двенадцать', 13 => 'тринадцать', 14 => 'четырнадцать', 15 => 'пятнадцать', 16 => 'шестнадцать', 17 => 'семнадцать', 18 => 'восемнадцать', 19 => 'девятнадцать');
// Поехали
$result = '';
if ( $_number == 0 )
{
return 'ноль';
}
if ( $_number < 0 )
{
$result[] = 'минус ';
$_number = abs($_number);
}
// Бьём на триады
$triads = array();
$string = strrev($_number);
$i = 0;
while ( true )
{
$value = substr($string, 3 * $i, 3);
if ( $value == '' )
{
break;
}
else
{
$triads[] = $value;
}
$i++;
}
// Озвучиваем их
for ( $i = count($triads) - 1; $i >= 0; $i-- )
{
if ( $result != '' )
{
$result .= ' ';
}
$triad = $triads[$i];
if ( strlen($triad) == 3 )
{
$result .= $stringsX00[$triad[2]];
}
if ( strlen($triad) > 1 )
{
if ( $value[1] == 1 )
{
$result .= ' ' . $strings10to19[$triad[1] . $triad[0]];
continue;
}
if ( $triad[1] > 0 )
{
$result .= ' ' . $stringsX0[$triad[1]];
}
}
if ( $triad[0] != 0 )
{
$gender = $i > 0 ? $triadsInfo[$i]['gender'] : $_gender;
$result .= ' ' . $stringsX[$gender][$triad[0]];
}
if ( $i > 0 )
{
$result .= ' ' . \Project\Helpers\Text::getCorrectPluralForm
(
strrev($triad),
$triadsInfo[$i]['forms'][0],
$triadsInfo[$i]['forms'][1],
$triadsInfo[$i]['forms'][2]
);
}
}
return $result;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Бабло в строку
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static public function moneyInWords( $_integerPart, $_fractionalPart = null )
{
$result =
self::numberInWords($_integerPart) . ' ' .
\Project\Helpers\Text::getCorrectPluralForm($_integerPart, 'рубль', 'рубля', 'рублей');
if ( $_fractionalPart !== null )
{
$result .=
' ' .
self::numberInWords($_fractionalPart) . ' ' .
\Project\Helpers\Text::getCorrectPluralForm($_fractionalPart, 'копейка', 'копейки', 'копеек');
}
return $result;
}