XQuery解析REST JSON返回数值被四舍五入如何保留小数位?
解决方案
核心修改点
- 将
Total列的字段类型从通用的xs:number替换为精确十进制类型xs:decimal,避免BI引擎默认对通用数值类型做自动取整处理 - 提取
Total字段值时,强制转换为xs:decimal类型,保留原始JSON返回的全部小数精度 - 补充原代码缺失的变量定义、语法闭合问题,优化冗余的变量赋值逻辑
- 注意原始JSON返回的数量字段键名为
Quanity(拼写缺字母t),如果实际拉取时数量字段取值异常可以对应调整代码里的属性匹配名
修改后完整代码
let $uri := ('http://XXXXXXXXXXXXXX') (: 补充原代码缺失的URI右引号 :) let $payload := ( ) let $header := () (: 接口需要自定义请求头可在此补充 :) let $jsonresult := mstr-rest:post($uri,$payload,$header) let $result := json:parse($jsonresult) return <Table><ColumnHeaders> <ColumnHeader name='json' type='xs:string' /> <ColumnHeader name='Quantity' type='xs:number' /> <ColumnHeader name='Total' type='xs:decimal' /> (: 替换为精确十进制类型 :) </ColumnHeaders> <Data>{for $ancestor in $result order by $ancestor return <Row> <json>{fn:data($ancestor)}</json> <Quantity>{fn:data($ancestor/pair[@name="Quantity"])}</Quantity> <Total>{xs:decimal(fn:data($ancestor/pair[@name="Total"]))}</Total> (: 强制转精确十进制保留全量小数 :) </Row>}</Data> </Table>
内容的提问来源于stack exchange,提问作者Joseleg
相关产品推荐
相关产品推荐

