Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / убрать незначимые нули / 12 сообщений из 12, страница 1 из 1
17.04.2008, 12:16
    #35261408
Screen_x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
доброго всем времени суток. подскажите, пожалуйста, с таким вопросом. есть столбец с текстовым типом данных. но в нем хранятся дробные числа. количество знаков после запятой равно трем. и ионгда получаются числа вроде таких 25.300, 2.020. можно ли как-то отследить эти незначимые нули и убрать? всм заранее спасиба
...
Рейтинг: 0 / 0
17.04.2008, 12:33
    #35261483
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Лучше это делать при конвертации:
Код: plaintext
1.
2.
3.
Func say_kol
Para k
Return alltrim(iif(k=int(k),str(k, 12 ),iif(k* 10 =int(k* 10 ),str(k, 12 , 1 ),iif(k* 100 =int(k* 100 ),str(k, 12 , 2 ),str(k, 12 , 3 )))))
...
Рейтинг: 0 / 0
17.04.2008, 12:33
    #35261486
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Как узнать количество значащих знаков после запятой
http://forum.foxclub.ru/read.php?29,312939,313006#msg-313006
...
Рейтинг: 0 / 0
17.04.2008, 12:57
    #35261610
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Если VFP9, то так (у меня переменная 9 цифр, 3 после запятой)

ALLTRIM(ALLTRIM(STR(MyVar,9,3),'0'),'.',' ')
...
Рейтинг: 0 / 0
17.04.2008, 17:13
    #35262661
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
В VFP9 у функций AllTrim(), LTrim(), RTrim() появились дополнительные параметры, показывающие, какие именно ведущие и концевые символы надо отбросить. В частности, можно отбросить и символ 0, и символ точки, если он окажется посленим

Код: plaintext
1.
2.
?RTrim("   12345.600", 1 ,"0",".")
?RTrim("   12345.000", 1 ,"0",".")

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

Код: plaintext
1.
2.
select MyTab
REPLACE ALL MyField WITH RTrim(MyField,  1 , "0", ".", " ")
...
Рейтинг: 0 / 0
17.04.2008, 17:38
    #35262754
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
"ВладимирМ" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:5562785@sql.ru...
> ?RTrim(" 12345.600",1,"0",".")
> ?RTrim(" 12345.000",1,"0",".")

?RTrim("1234500.000",1,"0"," ",".") && Даст неверныей результат
?RTRIM(RTrim("1234500.100 ",1,"0"," "),1,".")


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.04.2008, 17:41
    #35262764
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
> Автор: Погодин
> Если VFP9, то так (у меня переменная 9 цифр, 3 после запятой)
>
> ALLTRIM(ALLTRIM(STR(MyVar,9,3),'0'),'.',' ')


В данном случае поле текстовое и потому могут быть последними пробелы. Думаю
так будет корректнее:

?ALLTRIM(ALLTRIM(STR(1,9,3),'0',' '),'.')



(Пробелы внутри первого alltrim)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.04.2008, 17:58
    #35262826
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Galyamov Rinat?RTrim("1234500.000",1,"0"," ",".") && Даст неверныей результат
Вариант последовательной замены не даст ошибки:
Код: plaintext
? RTrim(RTrim("1234500.000",  1 , "0", " "),  1 , ".")

Но стоит случайно REPLACE дважды сделать, и тут все съедет.

Поэтому надо обрезание делать только в момент преобразования из числа в строку, тогда точка однозначно присутствует.

Чтобы причесать то что есть - надежней преобразовать строку в число, потом обратно с обрезанием:
Код: plaintext
ALLTRIM(ALLTRIM(STR(val(chrtran("1234500.000", ',.', set('point') + set('point'))),  12 ,  3 ),'0',' '), set('point'))
...
Рейтинг: 0 / 0
17.04.2008, 18:27
    #35262896
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
> ALLTRIM(ALLTRIM(STR(val(chrtran("1234500.000", ',.', set('point') +
> set('point'))), 12, 3),'0',' '), set('point'))


Ну и еще одна поправка:
lcNum='0.001'

lcNum='0.001'

?ALLTRIM(ALLTRIM(STR(val(chrtran(lcNum, ',.', set('point') + set('point'))),
12, 3),'0',' '), set('point')) && Опять неверно!!!



Вроде вот так будет совсем правильно:

lcNum=' 0.010 '

?RTRIM(RTRIM(ALLTRIM(STR(val(chrtran(lcNum, ',.', set('point') +
set('point'))), 12, 3),' '),1,'0'), set('point'))





:)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.04.2008, 21:11
    #35263115
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Galyamov Rinat
Ну и еще одна поправка:
...

Вроде вот так будет совсем правильно:

lcNum=' 0.010 '

Код: plaintext
?RTRIM(RTRIM(ALLTRIM(STR(val(chrtran(lcNum, ',.', set('point') + set('point'))),  12 ,  3 ),' '), 1 ,'0'), set('point'))

Поправка принимается, но так чуть покороче будет:
Код: plaintext
? ALLTRIM(RTRIM(STR(val(chrtran(lcNum, ',.', set('point') + set('point'))),  12 ,  3 ),'0',' '), set('point'), ' ')

:)
...
Рейтинг: 0 / 0
18.04.2008, 10:47
    #35263786
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
С любым set point, с любым кол-ом знаков после запятой, в т.ч. целые числа, и покороче :)
Код: plaintext
? str(nval, 16 ,iif(nVal% 1 = 0 , 0 ,len(alltrim(transform(nVal% 1 ),"0"))- 1 ))

Тест
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
dimension aTest[ 5 ]
aTest[ 1 ] =  0 
aTest[ 2 ] =  123 
aTest[ 3 ] =  1230 . 10300 
aTest[ 4 ] = - 12030 . 01030 
aTest[ 5 ] =  0 . 0010 

for i= 1  to alen(aTest)
   nVal = aTest[i]
   ? nVal, str(nval, 16 ,iif(nVal% 1 = 0 , 0 ,len(alltrim(transform(nVal% 1 ),"0"))- 1 ))
endfor
...
Рейтинг: 0 / 0
18.04.2008, 10:59
    #35263826
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
убрать незначимые нули
Для версий до 9-ки чуть сложнее
Код: plaintext
? str(nVal, 16 ,iif(nVal% 1 = 0 ,  0 , len(alltrim(chrtran(transform(nVal% 1 ),"0"," ")))- 1 ))
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / убрать незначимые нули / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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