首页 > 解决方案 > 如何在 Marklogic 中将大指数值转换为整数/十进制格式?

问题描述

我有一个指数值,例如3.22122E+23

在 Marklogic 中,当我尝试时 -xs:decimal(3.22122E+23) 我收到此错误:

[1.0-ml] XDMP-CAST: (err:FORG0001) xs:decimal(xs:double("3.22122E23")) -- 无效转换:xs:double("3.22122E23") 转换为 xs:decimal

eg 的较低值xs:decimal(3.22122E+18)给了我正确的结果,即3221220000000000000

我看到这是因为十进制溢出并且不能表示为十进制数据类型,但是 Marklogic 中有什么方法可以处理和计算如此巨大的值吗?

同样的问题适用于负值(3.22122E-23),我可以在其中处理和显示小数点后 20 位以上的数据。

标签: xquerymarklogic-9marklogic-10

解决方案


澄清您正在尝试完成什么样的逻辑或计算以及为什么需要将值转换为十进制会很有帮助。例如,要“显示”双精度值,您可以使用标准格式数字函数,而无需任何转换为​​十进制:

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-numberfn:format-number()

有关类型限制的详细信息,请参阅https://help.marklogic.com/Knowledgebase/Article/View/487/0/marklogic-server-and-the-decimal-type-implementationxs:decimal


推荐阅读