我有一个指数值,例如3.22122E+23
在Marklogic中,当我尝试-xs:decimal(3.22122E+23)
时我得到这个错误:
<1.0-ml]XDMP-CAST:(err:FORG0001(xs:decimal>
例如xs:decimal(3.22122E+18)
的较低值会给出正确的结果,即3221220000000000000
。
我知道这是因为十进制溢出,不能表示为十进制数据类型,但Marklogic中有什么方法可以处理和计算如此巨大的值吗?
同样的问题也适用于负值(3.22122E-23
(,我可以处理和显示小数点后20位以上的数据。
澄清您试图完成的逻辑或计算类型以及为什么需要将值转换为十进制会很有帮助。例如;显示";双值,您可以使用标准格式的数字功能,而无需任何转换为十进制:
let $x := xs:double(3.22122E+23)
return format-number($x,"#,##0.00")
收益率:
322,122,000,000,000,000,000,000.00
请参阅https://docs.marklogic.com/fn:format-有关fn:format-number()
使用的详细信息,请参阅编号。
请参阅https://help.marklogic.com/Knowledgebase/Article/View/487/0/marklogic-server-and-the-decimal-type-implementation以了解CCD_ 7类型的限制的细节。