Сохранение больших чисел при преобразовании в символы в APL - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующий номер в APL

1200000002341

Когда я делаю следующее

k←1200000002341
k←⍕k

Значение k становится 1,2E12.

Как мне сохранить тонкости числа при преобразовании в символьную форму?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы не говорите, какой диалект APL вы используете. Вот простой (и, возможно, хакерский) способ сделать это, который должен работать на большинстве:

k←1200000002341
n←⌈10⍟k+1       ⍝ number of digits in k
s←⍕(n⍴10)⊤k     ⍝ string
s←s~' '          ⍝ remove blanks
0 голосов
/ 22 января 2020

Это может зависеть от конкретной реализации APL, которую вы используете. В Dyalog APL системная переменная ⎕PP контролирует точность. Из документов :

⎕PP - это число значащих цифр на дисплее вывода цифр c. ⎕PP может быть присвоено любое целое значение в диапазоне от 1 до 34.

Для чисел с плавающей запятой двойной точности (что часто является значением по умолчанию для больших чисел), значение 17 обычно used (этого достаточно для представления двойного числа без потери точности).

      ⍕1200000002341
1.200000002E12
      ⎕PP←17
      ⍕1200000002341
1200000002341

Другим способом было бы преобразование данного числа в массив цифр в базе 10, а затем преобразование каждого di git в строка:

      ∊⍕¨10⊥⍣¯1⊢1200000002341
1200000002341

Считайте код выше как

  • 10⊥⍣¯1 Преобразовать в десятичные цифры
  • ⍕¨ Stringify (преобразовать число в строку) каждый раз git
  • Записаться; объединить все (вложенные) элементы в один вектор
...