Текущее время: Пт, июн 20 2025, 22:00

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: работа с большими числами
СообщениеДобавлено: Пн, июн 06 2016, 16:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, май 29 2012, 09:48
Сообщения: 102
Откуда: Казань
Пол: Женский
Добрый день!

Вопрос про работу с большими числами (17 разрядов)

Необходимо переводить числа из 36-ричной системы переводить в 10-ричную систему счисления. Использую тип float, а в итоге округляется последний разряд. Подскажите пож-та красивое решение.

Code:
DATA: ALCOCODE_38(16) TYPE C,
      i type f,
      Y_NUMB36 TYPE C,
      DEG TYPE f,
      SUM36 TYPE f,
      F_I10 TYPE f,
      F_BASE36 TYPE f,
      STR_SUM(22) TYPE C.

    ALCOCODE_38 = '0000045UBWOSJ0NF'.

  F_BASE36 = 36.
    i = 0.
    DEG = 15.

    DO 16 TIMES.
      Y_NUMB36 = ALCOCODE_38+i(1).
      read table IT_YBASE36 into YBASE36_LINE WITH KEY I36 = Y_NUMB36.
      F_I10 = YBASE36_LINE-I10.
      SUM36 = SUM36 +  F_I10 * ( 36  ** DEG ).
      I = I + 1.
      DEG = DEG - 1.
    ENDDO.

    call function 'FLTP_CHAR_CONVERSION'
       exporting
            input = SUM36
       importing
            flstr = STR_SUM.


Результат:
sum36 = 1.5218000002762252E+16.
STR_SUM = '15218000002762252'.
а должно быть STR_SUM = '15218000002762251'.

_________________
SAP – зверь загадочный


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: работа с большими числами
СообщениеДобавлено: Пн, июн 06 2016, 17:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Переводите в строковый.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с большими числами
СообщениеДобавлено: Пн, июн 06 2016, 18:10 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Не понял до конца Вашу проблему. Вопрос только к последнему вызову FLTP_CHAR_CONVERSION или по всему коду?
В sum36 результат правильный или там тоже должно быть 1.5218000002762251E+16?

Но может быть попробовать заменить тип "f" на другой тип? p или decfloat16/34

Вот, что говорит SAPhelp про выбор типов данных для вычислений.
Цитата:
Select suitable numeric types for numbers and calculations
Select a numeric type to suit the values that you want to map, in order to achieve the highest possible speed and accuracy. Here is a general rule of thumb:
  • i
  • p for fixed point numbers
  • decfloat16 or decfloat34 for floating point numbers
  • f in exceptional cases only

_________________
Поздравляю тебя, Шарик, ты - балбес!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: работа с большими числами  Тема решена
СообщениеДобавлено: Вт, июн 07 2016, 08:52 
Ассистент
Ассистент

Зарегистрирован:
Чт, май 17 2007, 16:31
Сообщения: 40
Откуда: Санкт-Петербург
Code:
CONSTANTS:
   gv_base      TYPE i      VALUE '36',
   gv_value     TYPE string VALUE '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

TYPES:
   t_numc36(20) TYPE n.
Code:
START-OF-SELECTION.
  PERFORM start-of-selection.

*&---------------------------------------------------------------------*
*&      Form  START-OF-SELECTION
*&---------------------------------------------------------------------*
FORM start-of-selection.

  DATA: lv_num TYPE t_numc36.
  DATA: result TYPE string.

  lv_num = '15218000002762251'.
  PERFORM convert_numc2base USING lv_num CHANGING result.
  WRITE: / lv_num , result.

  PERFORM convert_base2numc USING result CHANGING lv_num.
  WRITE: / lv_num , result.
  ULINE.

  lv_num = '15218000002762252'.
  PERFORM convert_numc2base USING lv_num CHANGING result.
  WRITE: / lv_num , result.

  PERFORM convert_base2numc USING result CHANGING lv_num.
  WRITE: / lv_num , result.
  ULINE.

ENDFORM.                    "START-OF-SELECTION
Code:
*&---------------------------------------------------------------------*
*&      Form  convert_numc2base
*&---------------------------------------------------------------------*
FORM convert_numc2base USING    p_numc   TYPE t_numc36
                       CHANGING p_string TYPE string.

  DATA: lv_num  LIKE p_numc,
        lv_rest TYPE i.

  CLEAR p_string.
  lv_num = p_numc.

  WHILE lv_num > 0.
    lv_rest = lv_num MOD gv_base.
    lv_num  = lv_num DIV gv_base.
    CONCATENATE gv_value+lv_rest(1) p_string INTO p_string.
  ENDWHILE.

ENDFORM.                    "convert_numc2base
Code:
*&---------------------------------------------------------------------*
*&      Form  convert_base2numc
*&---------------------------------------------------------------------*
FORM convert_base2numc USING    p_string TYPE string
                       CHANGING p_numc   TYPE t_numc36.

  DATA: lv_tmpstr TYPE string,
        lv_len    TYPE sy-fdpos,
        lv_pos    TYPE sy-fdpos,
        lv_offset TYPE sy-fdpos,
        lv_ext    TYPE t_numc36.

  CLEAR p_numc.

  lv_tmpstr = p_string.
  TRANSLATE lv_tmpstr TO UPPER CASE.

  lv_ext = 1.
  lv_len = STRLEN( lv_tmpstr ).

  DO lv_len TIMES.
    lv_pos = lv_len - sy-index.
    FIND lv_tmpstr+lv_pos(1) IN gv_value MATCH OFFSET lv_offset.
    p_numc = p_numc + lv_offset * lv_ext.
    lv_ext = lv_ext * gv_base.
  ENDDO.

ENDFORM.                    "convert_base2numc


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с большими числами
СообщениеДобавлено: Вт, июн 07 2016, 10:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, май 29 2012, 09:48
Сообщения: 102
Откуда: Казань
Пол: Женский
Спасибо все получилось :D

_________________
SAP – зверь загадочный


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: работа с большими числами
СообщениеДобавлено: Ср, июл 27 2016, 17:22 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 14 2016, 10:53
Сообщения: 4
Откуда: Киев
Пол: Мужской
Полезная вещь ! :)
Кстати сталкивался с подобным в формулах VOFM, никак не преобразовывалось число. Помог только вызов ФМ с расчётом числа.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB