4

MUMPS で大きな数値を文字列に変換しようとしていますが、できません。

私がやりたいことを説明しましょう:

s A="TEST_STRING#12168013110012340000000001"
s B=$P(A,"#",2)
s TAB(B)=1
s TAB(B)=1

TABvariableBが array の主キーになる配列を作成したいと思いますTAB

私がするとき、私ZWRは得るでしょう

A="TEST_STRING#12168013110012340000000001"
B="12168013110012340000000001"
TAB(12168013110012340000000000)=1
TAB("12168013110012340000000001")=1

ご覧のとおり、最初SETに変数Bnumber(間違って変換された)としてSET認識し、2番目に変数Bstring(私が見たいように)として認識します。私の質問は、変数を数値ではなくSET認識するコマンドの書き方です (これは私の意見では間違っています)。Bstring

どんなアドバイス/説明も役に立ちます。

4

2 に答える 2

5

これは、MUMPS に組み込まれている並べ替え/格納メカニズムの制限である可能性があり、MUMPS の実装によって異なります。原因は、MUMPS の変数値は型付けされていないのに対し、インデックス値は -- であり、数値インデックスは文字列インデックスの前にソートされるためです。大きな文字列を数値に変換すると、丸め誤差が発生する場合があります。これを防ぐには、インデックスの数字の前にスペースを追加して、明示的に文字列として扱う必要があります。

s TAB(" "_B)=1

私の知る限り、Intersystems Cache にはこの制限はありません。少なくとも、コードは Cache で正常に動作し、ドキュメントでは最大 309 桁をサポートすると主張しています。

http://docs.intersystems.com/cache20141/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_structure#GGBL_C12648

于 2014-08-22T00:34:37.480 に答える