MUMPS无法将Number格式化为String

时间:2014-08-20 14:39:27

标签: 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识别为{{1} (我希望看到)。 我的问题是如何编写string命令将变量SET识别为B而不是数字(我认为这是错误的)。

任何建议/解释都会有所帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我已尝试重新制作您的方案,但我没有看到您遇到的问题。 实际上不可能(在我看来)立即执行相同的命令(一个接一个执行)来产生两个不同的结果。

s TAB(B)= 1
s TAB(B)= 1

只要B的值在执行之间没有变化,结果就应该是:

TAB(" 12168013110012340000000001")= 1

Example of what GT.M implementation of MUMPS returns in your case