xquery - 如何在 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 位以上的数据。
解决方案
澄清您正在尝试完成什么样的逻辑或计算以及为什么需要将值转换为十进制会很有帮助。例如,要“显示”双精度值,您可以使用标准格式数字函数,而无需任何转换为十进制:
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
。
推荐阅读
- c# - 连接表的 DataGrid 不可编辑
- php - 如何在laravel中检查旧密码的验证
- python - 在使用点表示法的函数中包含列名作为参数
- php - How to use 'ORDER BY' statement in a 'SELECT DISTINCT CASE WHEN' statement in sql & php?
- r - Finding the trailing numbers in R
- c++ - 错误:'std::vector 类型的非常量引用的无效初始化
&' 来自 'std::vector 类型的右值 *' - java - What is the best way to work with android fragment backstack?
- java - 尝试从 Firebase 检索数据但获得空值
- java - 如何使用eclipse导出包含.class的jar文件
- odoo - 如何在 Odoo 上制作控制器以获得自定义值?