Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать количество цифр в числе / 19 сообщений из 19, страница 1 из 1
25.11.2018, 18:06
    #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
25.11.2018, 18:15
    #39738222
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
SLDS,

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

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

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



При необходимости, использовать форматную маску и nlsparam, а также отсеять знак "минус" и десятичнку точку/запятую.
...
Рейтинг: 0 / 0
26.11.2018, 11:27
    #39738424
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
mcwhiteи десятичнку точку/запятую.А сколько цифр в 1/3 ?
...
Рейтинг: 0 / 0
26.11.2018, 14:03
    #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
26.11.2018, 14:41
    #39738602
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
Да ну,

Не проще ли было начать с 1. Тогда и проходов цикла нужно меньше.
...
Рейтинг: 0 / 0
26.11.2018, 15:09
    #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
26.11.2018, 15:19
    #39738631
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
Stax,

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

Код: sql
1.
or cnt = 0

я добавил для случая num=0, тем самым избавившись от if/else, чего, собственно, и просил ТС.
Варианта проще в голову не пришло.
...
Рейтинг: 0 / 0
26.11.2018, 17:48
    #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
26.11.2018, 22:13
    #39738824
SY
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
26.11.2018, 22:48
    #39738844
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
SYНу и "число" это не тип данных.Придираться, так по полной. С точки зрения программирования, в числах нет цифр. Цифры есть в том или ином его представлении: простые дроби (элик), экспоненциальная запись, троичное кодирование, римская или кириллическая система счисления (кто тут цифры?),...
...
Рейтинг: 0 / 0
27.11.2018, 08:16
    #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
27.11.2018, 16:59
    #39739262
SY
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
27.11.2018, 18:09
    #39739325
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
SY1.0E+000А зеленая рожа отчего? В приведенном числе Е нужно было за цифру посчитать?
...
Рейтинг: 0 / 0
27.11.2018, 19:37
    #39739364
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать количество цифр в числе
-2-SY1.0E+000А зеленая рожа отчего? В приведенном числе Е нужно было за цифру посчитать?
А знаки порядка принято считать за знаки мантиссы? :)
...
Рейтинг: 0 / 0
27.11.2018, 21:00
    #39739399
SY
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посчитать количество цифр в числе / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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