ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Перевод числа в русский текст без округления

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Перевод числа в русский текст без округления
 
Здравствуйте!
Делаю:
aaa:=1.2
bbb:=NumToC(aaa,2,.T.)
Получаю - "одна"
А как получить - "одна целая две десятых"?

С уважением Титов А.
 
Все верно, функция для целых чисел.
Какая задача? В какой программе?
С уважением,
Ильин Евгений
 
Здравствуйте!
Цитата
itman пишет:
Все верно, функция для целых чисел.

Об этом и Вопрос - как перевести десятичное число в текст :surprise:
Программа - "БЭСТ-4".
Функцию использую в hrb.
 
Может я и заблуждаюсь (Константин поправит, если что ), но судя по всему перевод числа в пропись с дробями подразумевался только для валют. Необходимость вывести количественно значение прописью возникает обычно в отчетах, а там этот Вопрос решается средствами FastReport.
Можно самому написать алгоритм, дробная часть переводится как целая и добавляется определение разряда в зависимости от разряда (десятая, сотая, и т.д.)
С уважением,
Ильин Евгений
 
Цитата
itman пишет:
судя по всему перевод числа в пропись с дробями подразумевался только для валют

Это Плохо! :sad:
 
Не думаю, алгоритм на самом деле несложен.
Задачка для разминки :lol:
С уважением,
Ильин Евгений
 
Если это как-то поможет могу выложить исходный код NUMTOC
 
Цитата
nordk пишет:
Если это как-то поможет могу выложить исходный код NUMTOC

Да. Спасибо!
 
Код
FUNCTION NumToC( nNum, nRod, Lower ) //Преобразование целого числа в стринг
LOCAL cNum:=STR(nNum,15,0)
LOCAL l,c,c1,cString:=''

  IF ValType( Global_Num ) <> 'A'
    LoadNumber()
  ENDIF
IF !EMPTY(VAL((c:=SUBSTR(cNum,1,3))))
   c1:=RIGHT(c,1)
   l:=(SUBSTR(c,2,1)='1')
   cString:=Num3ToC(c,1)+' '+;
    NumRod( 2, 4, IF(l.OR.c1='0'.OR.c1>'4',2,IF(c1='1',1,3)) )
ENDIF
IF !EMPTY(VAL((c:=SUBSTR(cNum,4,3))))
   c1:=RIGHT(c,1)
   l:=(SUBSTR(c,2,1)='1')
   cString+= IF(!EMPTY(cString),' ','')+;
             Num3ToC(c,1)+' '+;
    NumRod( 2, 3, IF(l.OR.c1='0'.OR.c1>'4',2,IF(c1='1',1,3)) )
ENDIF
IF !EMPTY(VAL((c:=SUBSTR(cNum,7,3))))
   c1:=STRTRAN(RIGHT(c,1),' ','0')
   l:=(SUBSTR(c,2,1)='1')
   cString+=IF(!EMPTY(cString),' ','')+;
            Num3ToC(c,1)+' '+;
            NumRod( 2, 2, IF(l.OR.c1='0'.OR.c1>'4',2,IF(c1='1',1,3)) )
ENDIF
IF !EMPTY(VAL((c:=SUBSTR(cNum,10,3))))
   c1:=STRTRAN(RIGHT(c,1),' ','0')
   l:=(SUBSTR(c,2,1)='1')
   cString+=IF(!EMPTY(cString),' ','')+Num3ToC(c,2)+' '+;
            NumRod( 2, 1, IF(l.OR.c1='0'.OR.c1>'4',2,IF(c1='1',1,3)) )
ENDIF
IF !EMPTY(VAL((c:=SUBSTR(cNum,13,3))))
   cString+=IF(!EMPTY(cString),' ','')+Num3ToC(c,nRod)
ENDIF
IF !EMPTY(cString).AND.Lower=NIL
   cString:=UPPER(LEFT(cString,1))+SUBSTR(cString,2)
ENDIF
RETURN (cString)

STATIC FUNCTION Num3ToC( cNum, nRod ) //Преобразование 3-значного целого числа в стринг
//nRod=1-мужской род 2-женский 3-сpедний
  LOCAL n1,n2,n3,n23
  LOCAL cString:=''
IF ((n1:=VAL(LEFT(cNum,1)))>0)
   cString:= NumRod( 1, 27+n1, @nRod )
ENDIF
IF ((n23:=VAL(SUBSTR(cNum,2,2)))>=10.AND.n23<20)
   cString+=IF(!EMPTY(cString),' ','')+NumRod( 1, n23, @nRod )
ELSE
   IF ((n2:=VAL(SUBSTR(cNum,2,1)))>0)
      cString+=IF(!EMPTY(cString),' ','')+NumRod( 1, 18+n2, @nRod )
   ENDIF
   IF ((n3:=VAL(SUBSTR(cNum,3,1)))>0)
      cString+=IF(!EMPTY(cString),' ','')+NumRod( 1, n3, @nRod )
   ENDIF
ENDIF
RETURN (cString)
Страницы: 1
Читают тему (гостей: 2)