MUMPS не может отформатировать число в строку
Я пытаюсь преобразовать большое число в строку в MUMPS, но не могу.
Позвольте мне объяснить, что я хотел бы сделать:
s A="TEST_STRING#12168013110012340000000001"
s B=$P(A,"#",2)
s TAB(B)=1
s TAB(B)=1
Я хотел бы создать массив TAB
где переменная B
будет первичным ключом для массива TAB
,
Когда я делаю ZWR
я получу
A="TEST_STRING#12168013110012340000000001"
B="12168013110012340000000001"
TAB(12168013110012340000000000)=1
TAB("12168013110012340000000001")=1
как вы можете видеть первым SET
распознать переменную B
как number
(неправильно преобразован) и второй SET
распознать переменную B
как string
(как я хотел бы видеть). Мой вопрос как написать SET
команда для распознавания переменной B
как string
вместо числа (что на мой взгляд неверно).
Любой совет / объяснение будет полезно.
2 ответа
Это может быть ограничением механизма сортировки / хранения, встроенного в MUMPS, и отличается в разных реализациях MUMPS. Причина в том, что, хотя значения переменных в MUMPS не типизированы, значения индексов - и числовые индексы сортируются перед строковыми. При преобразовании большой строки в число могут возникнуть ошибки округления. Чтобы этого не происходило, вам нужно добавить пробел перед числом в вашем индексе, чтобы явно рассматривать его как строку:
s TAB(" "_B)=1
Насколько я знаю, Intersystems Cache не имеет этого ограничения - по крайней мере, ваш код отлично работает в Cache, а в документации утверждается, что он поддерживает до 309 цифр:
Я пытался воссоздать ваш сценарий, но не вижу проблемы, с которой вы столкнулись. На самом деле невозможно (на мой взгляд) для одной и той же команды, выполняемой сразу (одно выполнение за другим), получить два разных результата.
s TAB (B) = 1
s TAB (B) = 1
до тех пор, пока значение B не меняется между выполнениями, результат должен быть:
TAB ("12168013110012340000000001") = 1
Пример того, что GT.M реализация MUMPS возвращает в вашем случае