在下面的xquery中,一切都按预期工作,但在下面的行中显示为:
<h2>Total word count: {format-number($sum, "0")}</h2>
如果总和超过一百万,则显示为:
&#34; 1.516908E6&#34;
我不明白这个数字。例如,为什么会有&#34; E&#34;?
任何低于一百万的印刷品都按预期印刷,例如:
&#34; 72188&#34;为72,188。
我可能遗漏了一些基本的东西,但我会感激任何帮助。
开始xquery
xquery version "3.0";
declare namespace tei="http://www.tei-c.org/ns/1.0";
declare option exist:serialize "method=html media-type=text/html ident=no";
let $commentaryid := request:get-parameter('commentaryid', '')
let $collection := concat("scta", "/", $commentaryid)
let $terms :=
<terms>
{
util:index-keys(
collection(concat("/db/apps/", $collection))//tei:p,
"",
function($key, $count) {
<term name="{$key}" count="{$count[1]}"
docs="{$count[2]}"/>
}, -1, "lucene-index")
}
</terms>
let $sum := sum($terms//@count)
return
<html>
<head>
</head>
<body>
<h1>Frequency analysis for {$collection}</h1>
<h2>Total word count: {format-number($sum, "0")}</h2>
<table>
<tr>
<td>Term</td>
<td>Frequency</td>
<td>Percentage</td>
</tr>
{
for $term in $terms//term
let $frequency := xs: integer($term/@count/string())
let $percentage := format-number(($term/@count div $sum), "%.00")
order by $frequency descending
return
<tr>
<td>{$term/@name/string()}</td>
<td>{$frequency}</td>
<td>{$percentage}%</td>
</tr>
}
</table>
</body>
</html>
答案 0 :(得分:0)
将xs:double转换为字符串的XPath规则表示,小于百万分之一或超过一百万的数字应格式化为“科学记数法”。如果这不是您想要的,那么最好将数字转换为整数或小数 - 最好尽早。在您的情况下,转换为xs:double
隐含地发生在您编写
sum($terms//@count)
您可以使用
来避免它sum($terms//xs:integer(@count))
<强>后记强>
我认为我没有仔细阅读你的问题。我没有看到你实际上是在调用format-number()来输出值。除非您明确要求,否则format-number不应以指数/科学记数法生成输出。所以这里还有其他的东西,这可能是eXist特有的。