powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проще оставить лишь значимые цифры в целом числе?
22 сообщений из 22, страница 1 из 1
Как проще оставить лишь значимые цифры в целом числе?
    #39269878
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, сабж: как проще узнать количество нулей справа в ЦЕЛОМ числе и отбросить их, оставив лишь значимые цифры? Нули между значимыми числами - также должны остаться.
Как это сделать в цикле - понятно, например - через циклическую оценку MOD(число,10). Нет ли более прямых без-цикловых альтернатив? Что-то ничего дельного не приходит в голову :(
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269886
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Преобразовать в строку, а затем анализировать последний символ
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269888
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае будет цикл, т.к. все алгоритмы поразрядно работают.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269889
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но это - тоже цикл. Интуиция мне подсказывает, что должен существовать какой-то способ типа "взгляд сверху" сразу на ВСЁ число :)
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269910
neznajkaИнтуиция мне подсказывает, что должен существовать какой-то способ типа "взгляд сверху" сразу на ВСЁ число :)Плохая интуиция часто вводит в заблуждение.
Кстати, на каком-нить примере поясните ваше понимание слова "значащий" по отношению к конкретному разряду числа.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269933
Дед Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если число в таблице хранится, и свойство Numeric, то данные хранятся без ведущих нулей. Если Chsr, то симольное значение может быть и с нулями впереди. Здесь нужно глянуть свойтво поля, и сделать соответствующие преобразования. Если это показывается в форме в поле, то нужно смотреть свойство Format, этого поля, там может стоять знак "С ведущими нулями".
Нужна более полная информация.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269964
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-дя, неточно выразился в отношении целого числа. Уточняю: использовал слово "значащий" - в смысле "все цифры, кроме нуля". Вопрос, наверное, надо свести к "как проще узнать, сколько раз данное целое число делится на 10 без остатка".
По-видимому, интуиция и вправду подводит - без цикла никак не обойтись :(

To Дед Евгений:
Не, я в данном случае "борюсь " вовсе не с ВЕДУЩИМИ нулями :)
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269972
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно чуть уменьшить количество операций с помощью CASE
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
do case
    case MOD(число,10) != 0
       *
    case MOD(число,100) != 0
       число = число / 10
    case MOD(число,1000) != 0
       число = число / 100
...
endcase
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39269980
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Dima T !
Это действительно сокращает мне количество операций проверки.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39270300
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznajka,

это сокращает количество написанных операций
под капотом кейса ЕМНИП живёт тот же самый иф
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39270339
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirэто сокращает количество написанных операций
под капотом кейса ЕМНИП живёт тот же самый иф
Он про цикл писал, типа такого
Код: sql
1.
2.
3.
do while MOD(число,10) = 0
   число = число / 10
enddo


тут операций больше.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39270398
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно верно, Dima T - именно такой цикл мне первым и пришёл, было, в голову :)
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271480
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм... Неожиданно вспомнил о наличии параметров в функциях ALLTRIM(), LTRIM(), RTRIM()
- и нашёл вроде и не слишком элегантное, но вполне приемлемое для меня
"безцикловое" решение:

nnn=120000 && Исходное целое число с неизвестным числом нулей справа
asd=ALLTRIM(STR(nnn,12,0)) && Делаем из него строку с заведомо "вместительным" количеством знакомест
? LEN(asd)-LEN(RTRIM(asd,1,'0')) && Выясняем искомое количество нулей

Может и не "подвиг программера" - но вполне работает :)
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271552
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznajka, разве задача не состояла в получении как можно более быстрого алгоритма? Наверное, даже do while с делением на 10 будет быстрее этого решения на строках.
не могу по этому поводу не вспомнить бессмертное
Код: sql
1.
2.
3.
4.
5.
bool IsNumber (string str)
{
return (str.Replace ("0", "").Replace ("1", "").Replace ("2", "").Replace ("3", "").Replace ("4", "").Replace ("5", "").Replace ("6", "").Replace ("7", "").
Replace ("8", "").Replace ("9", "").Length == 0);
}

...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271639
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да? А я думал, чем меньше команд - тем быстрее алгоритм :(
Обидно, однако, что так всё нелогично устроено... А мне всегда так нравились строковые функции в Фоксе!..
Ладно, пусть уж тогда будет набивший мне оскомину цикл - мне потом всё равно это понадобится в Python+JavaScript переводить - так цикл, наверное, будет легче перевести.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271679
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznajkaчем меньше команд - тем быстрее алгоритм :(Тогда вот ещё вариант - написать функцию, которая вычисляет количество нулей, и вызывать её. Вызов функции - всего одна команда, такой код просто порвёт все остальные варианты по производительности
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271721
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну! Самописная же функция - заведомо медленнее, чем встроенная. Я лишь о встроенных функциях/командах в данном случае писал.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271733
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznajka,

долго проверить, что ли
запусти каждый вариант миллион(10,100...) раз, выведи время
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271734
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чай машинное время нынче не расписано по минутам :)
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39271741
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я так обычно и проверяю. В моей ситуации - цикл всё-таки лучше.
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39273768
SoftwareBoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
neznajkaГм... Неожиданно вспомнил о наличии параметров в функциях ALLTRIM(), LTRIM(), RTRIM()
- и нашёл вроде и не слишком элегантное, но вполне приемлемое для меня
"безцикловое" решение:

nnn=120000 && Исходное целое число с неизвестным числом нулей справа
asd=ALLTRIM(STR(nnn,12,0)) && Делаем из него строку с заведомо "вместительным" количеством знакомест
? LEN(asd)-LEN(RTRIM(asd,1,'0')) && Выясняем искомое количество нулей

Может и не "подвиг программера" - но вполне работает :)
Можно и не выяснять количество нулей, а сразу убрать их:
Код: sql
1.
2.
nnn = 120000
? VAL(ALLTRIM(STR(nnn,12,0),,'0',' '))
...
Рейтинг: 0 / 0
Как проще оставить лишь значимые цифры в целом числе?
    #39276167
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за участие, SoftwareBoy.
Я, наверное, недостаточно чётко описал свой вопрос - мне количество нулей знать всё-таки НУЖНО, т.к. оно далее используется в программе для указания множителя.
В принципе - всё уже заработало как я хотел, поэтому тему можно считать закрытой.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проще оставить лишь значимые цифры в целом числе?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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