powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция, возвращающая количество знаков в числовом выражении
4 сообщений из 4, страница 1 из 1
Функция, возвращающая количество знаков в числовом выражении
    #34072997
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bonjour tout le monde,

Есть ли в FoxPro функция или сравнительно простой способ получить общее количество знаков и количество знаков после десятичной точки в числовом выражении, (числовое выражение при этом необязательно является полем таблицы) не используя функции LCK типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// возвращает общее  количество знаков в числовом выражении
void FAR NWidth(ParamBlk FAR *parm)  {
   _RetInt(parm->p[ 0 ].val.ev_width,  10 );
}
// возвращает количество знаков после десятичной точки  в числовом выражении
void FAR NPrecision(ParamBlk FAR *parm) {
   _RetInt(parm->p[ 0 ].val.ev_length,  10 );
}

FoxInfo myFoxInfo[] = {
	{"NWIDTH",(FPFI)  NWidth,  1 , "N"},
	{"NPRECISION",(FPFI)  NPrecision,  1 , "N"}
};

FoxTable _FoxTable = {
	(FoxTable FAR *) 0 , sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo
};
Merci.
...
Рейтинг: 0 / 0
Функция, возвращающая количество знаков в числовом выражении
    #34073951
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общая логика: сначала число трансформируется в строку, затем делается строковый анализ.

Если концевые нули после запятой - не считаются, тогда так:

Код: plaintext
1.
2.
3.
4.
5.
LOCAL lnValue, lcValue
lnValue =  12345 . 789 
lcValue = TransForm(m.lnValue)
?"Целая часть", AT(SET("POINT"),m.lcValue) -  1 
?"Дробная часть", LEN(m.lcValue) - AT(SET("POINT"),m.lcValue)

Разумеется, нужен еще контроль на тот случай, если дробной части вообще нет.

Если принципально важны концевые нули в дробной части, тогда вместо Transform() следует использовать такое выражение

Код: plaintext
?ALLTRIM(PADC( 123456 . 7890 , 20 ))

Есть еще вариант, загнать переменную памяти в поле таблицы и посмотреть полученную размерность

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
LOCAL lnValue
lnValue =  123456 . 7890 
CREATE CURSOR test (f1 I)
APPEND BLANK
SELECT m.lnValue as f1 FROM test INTO CURSOR curValue

LOCAL laFields( 1 )
AFIELDS(laFields)
?laFields[ 1 , 3 ], laFields[ 1 , 4 ]

Но в этом случае получим не количество знаков, а реальную размерность, выделенную под данное число.
...
Рейтинг: 0 / 0
Функция, возвращающая количество знаков в числовом выражении
    #34074047
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот - еще на клиппере делал

Код: plaintext
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.
Function IntLen(nNum)
* длинна целой части числа
If Empty(nNum)
	nNum= 0 
Endif
Return Len(Alltrim(Str(Int(nNum))))

Function DecLen(nNum)
* длинна дробной части числа
Local cNum,dL
dL= 0 
If Empty(nNum)
	nNum= 0 
Endif
cNum=nNum-Int(nNum)
If cNum= 0 
	Return  0 
Endif
Do While cNum-Int(cNum)> 0 
	cNum=cNum* 10 
	dL=dL+ 1 
Enddo
Return dL

Function DigLen(nNum)
* длинна числа ( целая+точка+дробная)
Local dL
If Empty(nNum)
	nNum= 0 
Endif
dL=IntLen(nNum)
If DecLen(nNum)> 0 
	dL=dL+DecLen(nNum)+ 1 
Endif
Return dL
...
Рейтинг: 0 / 0
Функция, возвращающая количество знаков в числовом выражении
    #34075413
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ответившим.
Владимир, в Вашем первом способе концевые нули после запятой считаются,
тогда как в функции -=AlexiS=- концевые нули после запятой не считаются.
В общем, я убедился, что никакой встроенной в FoxPro функции, позволяющей находить количество десятичных знаков и общее количество знаков, пока нет.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Функция, возвращающая количество знаков в числовом выражении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]