Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в отчете отображать целые числа без дробной части? / 25 сообщений из 47, страница 1 из 2
12.11.2008, 23:53
    #35650463
johngorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Вопрос вообщем такой, как в отчете отображать целые числа без дробной части, т.е. если поле все таки имеет какие то знаки после запяой, но и встречаются целые числа? Вот например чтобы 4.564 так и отображалось, а вот 8.000 - отображалось как 8. И если это воозможно то поделитесь как сделать тоже самое в гриде, еслит кто знает. Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
13.11.2008, 01:29
    #35650500
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
johngorn, для этого есть свойство Grid - DynamicInputMask и признак Empty(). Если

k = 4.564
Form.Grid.Column1.DynamicInputMask = 'IIF(EMPTY(k-INT(k)), "999 999", "999 999.9999")' - поэкспериментируй в этом направлении...

для отчета - EMPTY(k-INT(k)), - выводишь INT(k), если нет, выводишь само k
...
Рейтинг: 0 / 0
13.11.2008, 02:44
    #35650526
johngorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Валентин Н.Карелин, спасибо, про грид не знал про свойство DynamicInputMask , а вот с отчетом затупил немного... видно заработался, бывает. Ответ исчерпывающий.
...
Рейтинг: 0 / 0
13.11.2008, 03:52
    #35650543
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
johngornне знал про свойство DynamicInputMask

А вообще семейство свойств Dynamic очень хорошее и гибкое. Грид с его помощью всякими картинками можно заселить, разукрасить строки, в строки вставить объекты (в одной строке Button, в другой CheckBox, в третьей Image и т.д. и всё это в одной колонке), в одной колонке центровать влево, вправо и посередине сразу! О, какой прикол!... Пользуйся...
...
Рейтинг: 0 / 0
13.11.2008, 05:22
    #35650563
Gendrive
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Валентин Н.Карелинjohngornне знал про свойство DynamicInputMask

А вообще семейство свойств Dynamic очень хорошее и гибкое. Грид с его помощью всякими картинками можно заселить, разукрасить строки, в строки вставить объекты (в одной строке Button, в другой CheckBox, в третьей Image и т.д. и всё это в одной колонке), в одной колонке центровать влево, вправо и посередине сразу! О, какой прикол!... Пользуйся...

Да, согласен гибкое, но злоупотреблять им сильно не стоит. Ибо при большом количестве всяких динамиков в грайде он тупить наичинает безбожно ;)
...
Рейтинг: 0 / 0
13.11.2008, 09:29
    #35650752
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
GendriveДа, согласен гибкое, но злоупотреблять им сильно не стоит. Ибо при большом количестве всяких динамиков в грайде он тупить наичинает безбожно ;)

А злоупотреблять всегда нехорошо )))). И в Grid и в TreeView и в других объектах. Да и по жизни...
...
Рейтинг: 0 / 0
13.11.2008, 09:58
    #35650828
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Та же проблема с выводом количеств. В подавляющем большинстве это целое число.
Чтобы везде огород не городить из IIF`ов, я один раз функцию написал и ее пользую:
Код: 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
13.11.2008, 10:45
    #35650965
johngorn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Всем спасибо за ответы!!!!
...
Рейтинг: 0 / 0
15.11.2008, 23:27
    #35656209
Dinozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
johngorn, я пользуюсь еще одним способом - преобразовываю число в символьную строку и затем его отображаю там, где надо.
Для этого я сделал специальную функцию StrTrimZero(tnX).
Почему не просто TRANSFORM ? Во-првых TRANSFORM оставляет нули в конце дробной части, а во-вторых, мне приходилось встречаться со случаями, когда вместо трех цифр дробной части выдавался длинный хвост из девяток. Возможно, этот баг уже исправлен - я, к сожалению, не помню конкретного значения.
Одно замечание - это название функции (StrTrimZero) оказалось крайне неудачным - Фокс иногда ассоциирует его с зарезервированными словами. Так что, если будете применять эту функцию, то назовите ее как-нибудь иначе.
Теперь об использовании. Пусть в таблице есть числовое поле ostatok. Тогда в качестве источника данных для поля отчета я пишу StrTrimZero(ostatok). Так же я поступаю, если нужно показать число в ReadOnly текстовом поле формы. В сетке же для колонки этого поля я пишу вычисляемое значение (StrTrimZero(ostatok)) - внешние скобки нужны из-за неудачного названия функции. Т.е. если я опеределяю сетку в коде, то я пишу:
ThisForm.grdMyGrid.grcOstatok.ControlSource = "(StrTrimZero(ostatok))"

Ну и, наконец, код функции:
Код: 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.
***************************************************************
*  Преобразование числа в строку с отсечением концевых нулей  *
*  в дробной части и необязательным (по умолчанию) отсечением *
*  всех пробелов.  StrTrimZero( 123 . 560 ) -> "123.56"           *
***************************************************************
FUNCTION StrTrimZero
LPARAMETERS tnNumb, tcFormat
* Входные параметры:
*    tnNumb - преобразуемое число.
*   tcFormat - код формата:
*     "Z" - (по умолчанию) - нулевое значение числа 
*				  преобразуется в пустую строку.

* Возвращаемое значение:
*	 Cимвольное представление числа без лидирующих и концевых пробелов,
*	 а также без концевых нулей в дробной части.

IF PARAMETERS() <  2 
     tcFormat = "Z"
ENDIF

IF EMPTY(tnNumb)
     RETURN IIF(tcFormat="Z", "", "0")
ELSE
     IF INT(tnNumb) = tnNumb
          RETURN LTRIM(STR(tnNumb, 18 )) 		
     ELSE
          IF tnNumb >  0  .AND. tnNumb <  1 
               RETURN "0"+CHRTRAN(ALLTRIM(CHRTRAN(STR(tnNumb,  18 ,  5 ), "0", " ")), " ", "0")
           ELSE
	RETURN CHRTRAN(ALLTRIM(CHRTRAN(STR(tnNumb,  18 ,  5 ), "0", " ")), " ", "0")
           ENDIF
      ENDIF
ENDIF
***************************************************************

И, в заключение, - функция, конечно, не быстрая, но на современных машинах вывод сетки не тормозит, ну а про отчеты и говорить нечего. Что же касается "некультурных" RETURN посреди кода, то это для скорости.
...
Рейтинг: 0 / 0
16.11.2008, 02:18
    #35656291
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
На всякий случай напомню, что в версии VFP9 у функций AllTrim(), LTrim(), RTrim() добавлены параметры, в которых можно указать, какие именно символы считать "пробелами". Поэтому отсечение концевых нулей можно сделать проще

Код: plaintext
1.
2.
3.
4.
5.
lnValue =  4 . 564 
?RTrim(str(lnValue, 20 , 18 ),"0",set("POINT"))

lnValue =  8 . 000 
?RTrim(str(lnValue, 20 , 18 ),"0",set("POINT"))

Хотя, как мне кажется, такая "лестница" будет не удобна для восприятия.
...
Рейтинг: 0 / 0
16.11.2008, 11:26
    #35656372
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
ВладимирМНа всякий случай напомню, что в версии VFP9...

Хорошее дополнение, Владимир. Хотя все ваши решения имеют с моей точки зрения один недостаток - они переводят число в строку! Для вывода на печать это по барабану, а для дальнейшей работы с переменной - не очень. Это не РНР, где

Код: plaintext
1.
2.
$a = "10" ;
$b = "2" ;
echo $a*$b
- выведет число 20, именно число . А Fox выдаст ошибку! Не стоит наступать на грабли "несоответствия типов" лишний раз... Но подчёркиваю - это лишь моё личное мнение...
...
Рейтинг: 0 / 0
16.11.2008, 11:52
    #35656383
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Валентин Н.Карелин[quot ВладимирМ]имеют с моей точки зрения один недостаток - они переводят число в строку!

ИМХО. Этот недостаток нисколько не мешает если преобразование делать непосредственно перед выводом на показ пользователю, т.е. в отчетах или в гриде.
...
Рейтинг: 0 / 0
16.11.2008, 23:31
    #35656795
Dinozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
ВладимирМНа всякий случай напомню, что в версии VFP9 у функций AllTrim(), LTrim(), RTrim() добавлены параметры, в которых можно указать, какие именно символы считать "пробелами". Поэтому отсечение концевых нулей можно сделать проще

Действительно, это весьма важно для этой задачи.

Я же, со своей стороны, видимо должен дезавуировать свое предложение относительно функции StrTrimZero(nValue) (см. выше), так как в VFP9 баг TRANSFORM'а, кажется, устранен.
Поэтому, в VFP9 в качестве ControlSource вполне можно использовать выражение:
RTRIM(TRANSFORM(nValue), 1, "0")
Во всяком случае, это работает втрое быстрее, чем предложенная мной ранее StrTrimZero(nValue).

Так что благодарю ВладимираМ за совет, и буду у себя при очередных корректировках заменять функцию StrTrimZero() на более эффективное выражение.
...
Рейтинг: 0 / 0
17.11.2008, 16:51
    #35658446
Dinozavr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
ВладимирМ... отсечение концевых нулей можно сделать проще

Код: plaintext
1.
2.
lnValue =  4 . 564 
?RTrim(str(lnValue, 20 , 18 ),"0",set("POINT"))
...
Прошу великодушно извинить меня за занудство, но у этого варианта есть подводный камень.
Попробуйте выполнить:
Код: plaintext
?RTrim(str( 9 . 158 , 20 , 18 ),"0",set("POINT"))
У меня получается 9.1579999... (Это как раз тот баг, который раньше был у TRANSFORM)

В то же время ?RTrim(TRANSFORM(9.158),"0") дает ожидаемый результат. Кстати, в данной задаче для RTrim действительно достаточно именно такого сочетания параметров. И еще, на всякий случай, надо учитывать, что результатом преобразования нуля (0 или 0.000) будет пустая строка.
...
Рейтинг: 0 / 0
17.11.2008, 18:52
    #35658786
Валентин Н.Карелин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Dinozavr?RTrim(str(9.158,20,18),"0",set("POINT"))[/src] У меня получается 9.1579999... (Это как раз тот баг, который раньше был у TRANSFORM)

Ай, молодца!!!... Ай да Dinozavr!!!!....

Господа, ведущие fox-coведы!!!! Прокомментируйте для ведомой братвы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
?RTrim(str( 4 . 158 , 20 , 18 ),"0",set("POINT"))
 4 . 158 
?RTrim(str( 5 . 158 , 20 , 18 ),"0",set("POINT"))
 5 . 158 
?RTrim(str( 6 . 158 , 20 , 18 ),"0",set("POINT"))
 6 . 158 
?RTrim(str( 7 . 158 , 20 , 18 ),"0",set("POINT"))
 7 . 158 
?RTrim(str( 8 . 158 , 20 , 18 ),"0",set("POINT"))
 8 . 157999999999999 
?RTrim(str( 9 . 158 , 20 , 18 ),"0",set("POINT"))
 9 . 157999999999999 
?RTrim(str( 10 . 158 , 20 , 18 ),"0",set("POINT"))
 10 . 158 
Dinozavr'у особый отдельный респект и уважуха !!! Таким людям тестерами работать - не было бы в МелкоСкопе багов... А я вам говорил, оставьте число числом. Не переводите в строки! Богу богово, а Кесарю кесарево.... Более 2000 лет назад сказано...
...
Рейтинг: 0 / 0
18.11.2008, 05:09
    #35659342
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Ну а кроме скрытых багов, есть еще и явные:

?RTrim(TRANSFORM(9000),"0")

?RTrim(str(900,20,18),"0",'.')






Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18.11.2008, 12:39
    #35660110
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
Валентин Н.КарелинГоспода, ведущие fox-coведы!!!! Прокомментируйте для ведомой братвы:
Код: plaintext
1.
2.
?RTrim(str( 8 . 158 , 20 , 18 ),"0",set("POINT"))
 8 . 157999999999999 

А что тут комментировать? С дуру можно и х@# сломать

При попытке превысить допустимую точность, фокс начинает показывать как есть. Заявленная точность фокса 15 десятичных знаков. Не надо от него требовать 18.

?RTrim(str(8.158,20, 14 ),"0",set("POINT")) && = 8.158

14 потому что еще один знак перед запятой. Хотя в реальности больше 4-х врядли кому потребуется.

Валентин Н.КарелинА я вам говорил, оставьте число числом. Не переводите в строки! Богу богово, а Кесарю кесарево.... Более 2000 лет назад сказано...

Первые неандертальские программисты так говорили? Не надо тут свое мнение никому навязывать. Написал почему не согласен и успокойся.

А что касается непосредственно конструкции RTrim(str()), то ее реальный косяк в примере Рината показан.
...
Рейтинг: 0 / 0
18.11.2008, 12:46
    #35660131
Как в отчете отображать целые числа без дробной части?
Dima TА что касается непосредственно конструкции RTrim(str()), то ее реальный косяк в примере Рината показан.
И какой там косяк показан? Может я что-то не вижу?
...
Рейтинг: 0 / 0
18.11.2008, 12:59
    #35660199
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
проходящий.И какой там косяк показан? Может я что-то не вижу?

Не видишь - проверь:
Код: plaintext
?RTrim(str( 9000 . 000 , 20 , 10 ),"0",set("POINT")) && =  9 
...
Рейтинг: 0 / 0
18.11.2008, 13:04
    #35660219
Как в отчете отображать целые числа без дробной части?
Dima Tпроходящий.И какой там косяк показан? Может я что-то не вижу?

Не видишь - проверь:
Код: plaintext
?RTrim(str( 9000 . 000 , 20 , 10 ),"0",set("POINT")) && =  9 

Очень остроумно.
Так вот как раз и хочу узнать ЧТО я не вижу?
...
Рейтинг: 0 / 0
18.11.2008, 13:10
    #35660248
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
проходящий.Так вот как раз и хочу узнать ЧТО я не вижу?

Если преобразование 9000.000 => "9" это не косяк, а норма, то я не понимаю на что ты смотришь.
...
Рейтинг: 0 / 0
18.11.2008, 13:13
    #35660255
Как в отчете отображать целые числа без дробной части?
Dima Tпроходящий.Так вот как раз и хочу узнать ЧТО я не вижу?

Если преобразование 9000.000 => "9" это не косяк, а норма, то я не понимаю на что ты смотришь.

Правильно ли я понял, что ты ожидаешь увидеть 9000?
...
Рейтинг: 0 / 0
18.11.2008, 13:15
    #35660268
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
проходящий.Правильно ли я понял, что ты ожидаешь увидеть 9000?

Топик перечитай с начала.
...
Рейтинг: 0 / 0
18.11.2008, 13:21
    #35660291
Как в отчете отображать целые числа без дробной части?
Dima Tпроходящий.Правильно ли я понял, что ты ожидаешь увидеть 9000?

Топик перечитай с начала.
Уже давно и не единожды перечитан. Будем конструктивно общаться или будем выплескивать бездоказательные эмоции?
Если первое, для ясности хотелось бы увидеть ожидаемый результат и объяснение причин именно такого ожидания. После чего можно будет приступить к поискам бревна в моем глазу.
...
Рейтинг: 0 / 0
18.11.2008, 13:31
    #35660340
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в отчете отображать целые числа без дробной части?
проходящий. Будем конструктивно общаться или будем выплескивать бездоказательные эмоции?

Где конструктив? Общаюсь с тобой в твоем же кратком стиле:
проходящий.И какой там косяк показан? Может я что-то не вижу?

проходящий.Очень остроумно.
Так вот как раз и хочу узнать ЧТО я не вижу?

Откуда мне знать что ты не видишь, если я не знаю что ты видишь? Пиши подробней.

проходящий.Уже давно и не единожды перечитан.
Плохо перечитан. Тема топика:
johngornВопрос вообщем такой, как в отчете отображать целые числа без дробной части, т.е. если поле все таки имеет какие то знаки после запяой, но и встречаются целые числа? Вот например чтобы 4.564 так и отображалось, а вот 8.000 - отображалось как 8.
О ней и речь. Преобразование 9000.000 => "9" явно не в тему.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как в отчете отображать целые числа без дробной части? / 25 сообщений из 47, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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