powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать количество цифр в числе
19 сообщений из 19, страница 1 из 1
Посчитать количество цифр в числе
    #39738221
SLDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, возникла задача посчитать количество цифр в числе, есть код, который нужно упростить оставив лишь один цикл WHILE, очень нужна помощь. Вот код, который нужно упростить:
DECLARE @num int, @cnt int
SET @num = 19
IF (@num = 0) SET @cnt = 1
ELSE BEGIN
SET @cnt = 0
WHILE (@num <> 0) BEGIN
SET @cnt = @cnt + 1
SET @num = @num / 10
END
END
SELECT @cnt AS 'Количество цифр';
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738222
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SLDS,

во-первых, задайте вопрос в правильной ветке форума. Ваш код больно уж на T-SQL похож (MS SQL Server ?)
во-вторых, встроенные функции len / datalength в T-SQL отменили, что ли?
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738227
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

datalen, судя по названию, для int должна вернуть 4.
А len может посчитать не только цифры, что легко учесть.
Для целого положительного можно еще математикой средней школы воспользоваться.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738246
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SLDSесть код, который нужно упростить оставив лишь один цикл WHILE

Его можно упростить выкинув цикл WHILE вообще. ДЕсятичный логарифм тебе в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738392
Фотография mcwhite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
length(to_char(n))



При необходимости, использовать форматную маску и nlsparam, а также отсеять знак "минус" и десятичнку точку/запятую.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738424
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcwhiteи десятичнку точку/запятую.А сколько цифр в 1/3 ?
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738565
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SLDS...есть код, который нужно упростить оставив лишь один цикл WHILE...
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @num int = 19,
        @cnt int = 0
WHILE (@num <> 0 or @cnt = 0) BEGIN 
    SET @cnt = @cnt + 1
    SET @num = @num / 10 
END
SELECT @cnt AS 'Количество цифр';
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738602
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну,

Не проще ли было начать с 1. Тогда и проходов цикла нужно меньше.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738622
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  1  DECLARE
  2   num int := 9;
  3   cnt int := 0;
  4  begin
  5  WHILE (num <> 0 or cnt = 0) loop
  6      cnt := cnt + 1;
  7      num := num / 10;
  8  END loop;
  9  dbms_output.put_line('cnt='||cnt);
 10* end;
SQL> /
cnt=2

PL/SQL procedure successfully completed.



....
stax
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738631
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Ты уверен, что знаешь, как работает целочисленное деление в mssql и присвоение в oracle, чтобы сравнивать?
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738652
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Код: sql
1.
or cnt = 0

я добавил для случая num=0, тем самым избавившись от if/else, чего, собственно, и просил ТС.
Варианта проще в голову не пришло.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738722
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t0 as (
select acos(-1) a from dual
)
, t1 as (
 select a 
       ,translate(a,'.,1234567890','.,') b
   from t0
)
 select a,length(a)-length(b) cn from t1;
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738824
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Не забываем про:

Код: plsql
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.
SQL> with t0 as (
  2  select 1 a from dual
  3  )
  4  , t1 as (
  5   select a
  6         ,translate(a,'.,1234567890','.,') b
  7     from t0
  8  )
  9   select a,length(a)-length(b) cn from t1
 10  /

         A         CN
---------- ----------
         1

SQL> with t0 as (
  2  select 1 a from dual
  3  )
  4  , t1 as (
  5   select a
  6         ,translate(a,'.,1234567890','.,') b
  7     from t0
  8  )
  9  select a,length(a)-nvl(length(b),0) cn from t1
 10  /

         A         CN
---------- ----------
         1          1

SQL> 



Ну и "число" это не тип данных. Так-что для, например, float этот метод не сработает eсли экспонента < -39:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> set numwidth 50
SQL> with t0 as (
  2  select 1E-39 a from dual union all
  3  select 1E-40 a from dual union all
  4  select 1E-50 a from dual
  5  )
  6  , t1 as (
  7   select a
  8         ,translate(a,'.,1234567890','.,') b
  9     from t0
 10  )
 11  select a,length(a)-nvl(length(b),0) cn from t1
 12  /

                                                 A                                                 CN
-------------------------------------------------- --------------------------------------------------
          .000000000000000000000000000000000000001                                                 39
         .0000000000000000000000000000000000000001                                                 37
1.00000000000000000000000000000000000000000000E-50                                                 37

SQL> 



SY.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738844
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу и "число" это не тип данных.Придираться, так по полной. С точки зрения программирования, в числах нет цифр. Цифры есть в том или ином его представлении: простые дроби (элик), экспоненциальная запись, троичное кодирование, римская или кириллическая система счисления (кто тут цифры?),...
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39738906
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-(кто тут цифры?),...Всё сущее есть число. (c) :)
SYeсли экспонента < -39
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> with t0 as (
  2      select 1E-39 a from dual union all
  3      select 1E-40 a from dual union all
  4      select 1E-50 a from dual
  5      )
  6  select a,regexp_count(cast(a as varchar(4000)),'[0-9]') cn from t0
  7  /

         A         CN
---------- ----------
1,0000E-39         39
1,0000E-40         40
1,0000E-50         50
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39739262
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t0 as (
select cast(1 as binary_float) a from dual
)
select a,regexp_count(cast(a as varchar(4000)),'[0-9]') cn from t0
/

                                                 A   CN
-------------------------------------------------- ----
                                          1.0E+000    5

SQL> 



SY.
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39739325
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY1.0E+000А зеленая рожа отчего? В приведенном числе Е нужно было за цифру посчитать?
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39739364
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-SY1.0E+000А зеленая рожа отчего? В приведенном числе Е нужно было за цифру посчитать?
А знаки порядка принято считать за знаки мантиссы? :)
...
Рейтинг: 0 / 0
Посчитать количество цифр в числе
    #39739399
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-А зеленая рожа отчего? В приведенном числе Е нужно было за цифру посчитать?
andrey_anonymousА знаки порядка принято считать за знаки мантиссы? :)
К тому что "число" это не тип данных. Число то же а его представлeние разное и соответственно разное кoличество цифр. А складывать кoличество цифр мантиссы c кoличеством цифр экспоненты без учета знака экспоненты как-то не укладывается в моей голoве.
Ну и самое главное не зaбываем как хранятся binary_float:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t0 as (
select cast(.001 as binary_float) a from dual
)
select a,regexp_count(cast(a as varchar(4000)),'[0-9]') cn,
dump(cast(a as varchar(4000))) d from t0
/

         A  CN D
---------- --- ----------------------------------------------------------
  1.0E-003  12 Typ=1 Len=15: 49,46,48,48,48,48,48,48,48,53,69,45,48,48,51

SQL> 



Тут считай E за цифру или знаки порядка за знаки мантиссы а 12 не получится :).

SY.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать количество цифр в числе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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