2016-03-24 3 views
0

Im folgenden xquery alles funktioniert, außer dass in der Linie wie erwartet unter dem liest:Summen über eine Million Anzeige seltsam mit xquery

<h2>Total word count: {format-number($sum, "0")}</h2> 

Wenn die Summe über a Million zeigt es als:

"1.516908E6"

Ich verstehe diese Nummer nicht. Zum Beispiel, warum gibt es ein "E"?

Alles unter einer Million Druck wie erwartet, zum Beispiel:

"72188" für 72.188.

Ich vermisse wahrscheinlich etwas Grundlegendes, aber ich wäre dankbar für jede Hilfe.

beginnen 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

Nur um zu bestätigen, gehe ich davon aus, dass Ihre util: index-keys() 'Ihre XQuery-Implementierung eXist ist. Welche Version von eXist verwenden Sie? – joewiz

+0

Hallo @joewiz, ich habe 3.0.RC1 – Jeff

+1

https://en.m.wikipedia.org/wiki/Scientific_notation#E_notation – har07

Antwort

0

Die XPath-Regeln für die Umwandlung von xs: double bespannen sagen, dass die Zahlen weniger als ein Millionstel oder mehr als eine Million sollte in „wissenschaftliche Schreibweise“ formatiert werden. Wenn dies nicht das ist, was Sie wollen, ist es wahrscheinlich am besten, die Zahlen in ganze Zahlen oder Dezimalzahlen zu konvertieren - vorzugsweise so früh wie möglich. In Ihrem Fall die Umstellung auf xs:double geschieht implizit, wo Sie schreiben

sum($terms//@count) 

und man konnte es vermeiden, indem Sie

sum($terms//xs:integer(@count)) 

Postscript

Ich glaube nicht, lese ich Ihre Frage vorsichtig genug. Ich habe nicht gesehen, dass Sie tatsächlich format-number() aufgerufen haben, um den Wert auszugeben. format-number sollte niemals eine Ausgabe in exponentiell/wissenschaftlicher Notation erzeugen, es sei denn, Sie fragen explizit danach. Es passiert also etwas anderes, was spezifisch für eXist sein könnte.