Текущее время: Ср, апр 24 2024, 09:49

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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