SaxonHE XQuery 求和运算精度
SaxonHE XQuery sum operation precision
我有一个这样的xml文档
<root>
<a>20947441.21</a>
<b>9961900</b>
<c>27360153.6</c>
<d>222864.95</d>
<e>10489146.31</e>
</root>
并且我需要得到根的子元素的总和。因此,使用 SaxonHE 处理器 (v 10.5) 执行以下 xquery 表达式:
let $s := (/root/a, /root/b, /root/c, /root/d, /root/e), $res := sum($s) return $res
表达式的结果是6.898150607000001E7
。为什么不是68981506.07
?如果没有科学记数法和适当的精度,我如何无法获得可预测的结果?
您可以使用format-number函数:
return format-number($res, '#.00')
并且您可以将表达式简化为 select root
的所有直接子代:
let $s := (/root/*), $res := sum($s) return format-number($res, '#.00')
甚至
let $res := sum(/root/*) return format-number($res, '#.00')
使用 xs:decimal
数据类型而不是默认的 number/xs:double 通过简单地选择 sum(root/*/xs:decimal(.))
或者,在您的样本的上下文中, sum($s ! xs:decimal(.))
.
我有一个这样的xml文档
<root>
<a>20947441.21</a>
<b>9961900</b>
<c>27360153.6</c>
<d>222864.95</d>
<e>10489146.31</e>
</root>
并且我需要得到根的子元素的总和。因此,使用 SaxonHE 处理器 (v 10.5) 执行以下 xquery 表达式:
let $s := (/root/a, /root/b, /root/c, /root/d, /root/e), $res := sum($s) return $res
表达式的结果是6.898150607000001E7
。为什么不是68981506.07
?如果没有科学记数法和适当的精度,我如何无法获得可预测的结果?
您可以使用format-number函数:
return format-number($res, '#.00')
并且您可以将表达式简化为 select root
的所有直接子代:
let $s := (/root/*), $res := sum($s) return format-number($res, '#.00')
甚至
let $res := sum(/root/*) return format-number($res, '#.00')
使用 xs:decimal
数据类型而不是默认的 number/xs:double 通过简单地选择 sum(root/*/xs:decimal(.))
或者,在您的样本的上下文中, sum($s ! xs:decimal(.))
.