Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Бывает) Кстати для того, что ты подумал есть отличный класс NumToText. Не помню только где я его взял. 08.12.11 04:45 Число просмотров: 2729
Автор: Fighter <Vladimir> Статус: Elderman
|
class NumToText{
var $Mant = array();
var $Expon = array();
function NumToText() {
}
function SetMant($mant) {
$this->Mant = $mant;
}
function SetExpon($expon) {
$this->Expon = $expon;
}
function DescrIdx($ins){
if(intval($ins/10) == 1)
return 2;
else{
$tmp = $ins%10;
if($tmp == 1)
return 0;
else if($tmp >= 2 && $tmp <= 4)
return 1;
else
return 2;
}
}
function DescrSot(&$in, $raz, $ar_descr, $fem = false){
$ret = '';
$conv = intval($in / $raz);
$in %= $raz;
$descr = $ar_descr[ $this->DescrIdx($conv%100) ];
if($conv >= 100){
$Sot = array('сто', 'двести', 'триста', 'четыреста', 'пятьсот',
'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
$ret = $Sot[intval($conv/100) - 1] . ' ';
$conv %= 100;
}
if($conv >= 10){
$i = intval($conv / 10);
if($i == 1){
$DesEd = array('десять', 'одиннадцать', 'двенадцать', 'тринадцать',
'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать',
'восемнадцать', 'девятнадцать' );
$ret.= $DesEd[$conv - 10] . ' ';
$ret.= $descr;
return $ret;
}
$Des = array('двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят',
'семьдесят', 'восемьдесят', 'девяносто' );
$ret .= $Des[$i - 2] . ' ';
}
$i = $conv % 10;
if($i > 0){
if( $fem && ($i==1|$i==2) ){
$Ed = array('одна', 'две');
$ret .= $Ed[$i - 1] . ' ';
}
else{
$Ed = array('один', 'два', 'три', 'четыре', 'пять',
'шесть', 'семь', 'восемь', 'девять' );
$ret .= $Ed[$i - 1] . ' ';
}
}
$ret .= $descr;
return $ret;
}
function Convert($sum){
$ret = '';
$Kop = 0;
$Rub = 0;
$sum = trim($sum);
$sum = str_replace(' ', '', $sum);
$sign = false;
if($sum[0] == '-'){
$sum = substr($sum, 1);
$sign = true;
}
$sum = str_replace(',', '.', $sum);
$Rub = intval($sum);
if (strpos($sum, '.')!==false){
list(, $Kop) = explode('.', $sum, 2);
if (strlen($Kop)>2) $Kop = substr($Kop, 0, 2);
$Kop = intval($Kop);
}
if($Rub){
if($Rub >= 1000000000)
$ret .= $this->DescrSot($Rub, 1000000000,
array('миллиард', 'миллиарда', 'миллиардов')) . ' ';
if($Rub >= 1000000)
$ret .= $this->DescrSot($Rub, 1000000,
array('миллион', 'миллиона', 'миллионов') ) . ' ';
if($Rub >= 1000)
$ret .= $this->DescrSot($Rub, 1000,
array('тысяча', 'тысячи', 'тысяч'), true) . ' ';
$ret .= $this->DescrSot($Rub, 1, $this->Mant) . ' ';
// если необходимо поднимем регистр первой буквы
// для корректно локализованных систем можно закрыть верхнюю строку
// и раскомментировать следующую (для легкости сопровождения)
//$ret[0]=mb_convert_case($ret[0],MB_CASE_TITLE,'utf-8');
//strtoupper($ret[0]);
}
if($Kop < 10)
$ret .= '0';
$ret .= $Kop . ' ' . $this->Expon[ $this->DescrIdx($Kop) ];
if($sign)
$ret = '-' . $ret;
return $ret;
}
}
class ManyToText extends NumToText{
function ManyToText(){
$this->SetMant( array('рубль', 'рубля', 'рублей') );
$this->SetExpon( array('копейка', 'копейки', 'копеек') );
}
}
|
|
|