php class CostConverter Число от 10 до 19 private static function num2

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
class CostConverter
{
/*
Число от 10 до 19.
*/
private static function num2str10_19($n)
{
assert($n >= 10 && $n <= 19);
$ret = '';
switch($n)
{
case 10: $ret = 'десять '; break;
case 11: $ret = 'одиннадцать '; break;
case 12: $ret = 'двенадцать '; break;
case 13: $ret = 'тринадцать '; break;
case 14: $ret = 'четырнадцать '; break;
case 15: $ret = 'пятнадцать '; break;
case 16: $ret = 'шестнадцать '; break;
case 17: $ret = 'семнадцать '; break;
case 18: $ret = 'восемнадцать '; break;
case 19: $ret = 'девятнадцать '; break;
}
return $ret;
}
/*
Цифра от 1 до 9.
*/
private static function num2str1_9($n, $gender)
{
assert($n >= 0 && $n <= 9);
$ret = '';
switch($n)
{
case 1: $ret = $gender ? 'один ' : 'одна '; break;
case 2: $ret = $gender ? 'два ' : 'две '; break;
case 3: $ret = 'три '; break;
case 4: $ret = 'четыре '; break;
case 5: $ret = 'пять '; break;
case 6: $ret = 'шесть '; break;
case 7: $ret = 'семь '; break;
case 8: $ret = 'восемь '; break;
case 9: $ret = 'девять '; break;
}
return $ret;
}
/*
Число от 1 до 999
*/
private static function num2str1_999($n, $gender)
{
assert($n >= 1 && $n <= 999);
$ret = '';
switch(floor($n / 100) % 10)
{
case 1: $ret .= 'сто '; break;
case 2: $ret .= 'двести '; break;
case 3: $ret .= 'триста '; break;
case 4: $ret .= 'четыреста '; break;
case 5: $ret .= 'пятьсот '; break;
case 6: $ret .= 'шестьсот '; break;
case 7: $ret .= 'семьсот '; break;
case 8: $ret .= 'восемьсот '; break;
case 9: $ret .= 'девятьсот '; break;
}
if(floor($n / 10) % 10 == 1)
{
$ret .= CostConverter::num2str10_19($n % 100);
}
else
{
switch(floor($n / 10) % 10)
{
case 2: $ret .= 'двадцать '; break;
case 3: $ret .= 'тридцать '; break;
case 4: $ret .= 'сорок '; break;
case 5: $ret .= 'пятьдесят '; break;
case 6: $ret .= 'шестьдесят '; break;
case 7: $ret .= 'семьдесят '; break;
case 8: $ret .= 'восемьдесят '; break;
case 9: $ret .= 'девяносто '; break;
}
$ret .= CostConverter::num2str1_9($n % 10, $gender);
}
return $ret;
}
/**
Отдать число с окончанием по шаманским правилам русского языка
@param n:int - число
@param words:array[3] - три варианта слова типа рубль, рубля, рублей
*/
private static function magick_ending($n, $words)
{
$ret = '';
if($n % 10 == 1 && floor($n / 10) % 10 != 1)
{
$ret = $words[0];
}
elseif($n % 10 >= 1 && $n % 10 <= 4 && floor($n / 10) % 10 != 1)
{
$ret = $words[1];
}
else
{
$ret = $words[2];
}
assert($ret != '');
return $ret;
}
/**
Число от 0 до 999999999.
@param n:int - число
@param gender:boolean, default true - возвращать мужской род (сорок один) или женский (сорок одна).
@return:string - строковые представление числа
*/
private static function num2string($n, $gender = true)
{
$ret = '';
if($n == 0)
{
$ret = 'ноль ';
}
else
{
if($millions = (floor($n / 1000000) % 1000))
{
$ret .= CostConverter::num2str1_999($millions, true);
$ret .= CostConverter::magick_ending($millions, array('миллион', 'миллиона', 'миллионов'));
$ret .= ' ';
}
if($thousands = (floor($n / 1000) % 1000))
{
$ret .= CostConverter::num2str1_999($thousands, false);
$ret .= CostConverter::magick_ending($thousands, array('тысяча', 'тысячи', 'тысяч'));
$ret .= ' ';
}
if($ones = ($n % 1000))
{
$ret .= CostConverter::num2str1_999($ones, $gender);
}
}
assert($ret != '');
return $ret;
}
public static function rub2string($n)
{
$ret = CostConverter::num2string($n, true);
$ret .= CostConverter::magick_ending($n, array('рубль', 'рубля', 'рублей'));
return $ret;
}
public static function kop2string($n)
{
$ret = $n." ";
$ret .= CostConverter::magick_ending($n, array('копейка', 'копейки', 'копеек'));
return $ret;
}
?>