Ich sortiere Tabellenspalten, die eine große Anzahl von Fließkommazahlen enthalten, von denen einige in wissenschaftlicher Schreibweise dargestellt sind.
Ich verwende das jQuery tablesorter2.0-Plugin, das 'parseFloat' für Zellen verwendet, die mit einer Ziffer beginnen. Das Problem besteht darin, dass parseFloat sehr kleine Zahlen, die als 1.23e-7 dargestellt werden, als Zeichenfolge zurückgibt und diese Zahl nicht auf 0.000000123 erweitert. Als Ergebnis sortiert der Tabellensorter den Inhalt der Spalte als Text anstelle von Zahlen.
%Vor%
Gibt es eine effiziente Möglichkeit, sehr kleine wissenschaftliche Notationsnummern als erweiterte Gleitpunktzahlen darzustellen?
Lösung:
tablesorter legt fest, wie eine Spalte basierend auf dem ersten automatischen Tabellensortierer-Parser sortiert wird, der für den Inhalt einer Zelle in dieser Spalte den Wert true zurückgibt. Wenn die Zelle 1.23e-7 enthielt, wurde sie standardmäßig nach dem Text sortiert, weil der 'Ziffern' Parser das nicht als Zahl interpretiert.
Um die Problemumgehung zu umgehen, stellt der folgende Code die Nummer der wissenschaftlichen Notation als Zeichenfolge dar, die von tablesorter als Ziffer interpretiert / analysiert werden kann, und stellt so die numerische Sortierung für die Spalte sicher. @bitplitter - Danke für den toFixed () Tipp.
%Vor%Obwohl das OP seine Lösung veröffentlicht hat, möchte ich eine etwas einfachere Lösung teilen, über die ich gestolpert bin, die auf den Parsern in der Tabelle basiert. Quellcode und die Regex von JasonS auf eine andere Frage .
%Vor% Es funktioniert auf meinen Tabellen mit so ziemlich allen Werten, die in wissenschaftlicher Notation angegeben sind. Es erkennt automatisch (das is:
-Teil) und sortiert mehrere Felder korrekt.
Hoffe es hilft anderen, die über diese Frage stolpern könnten.
Sie können toFixed()
anstelle von parseFloat()
verwenden, um die Zahlen so zu formatieren, wie Sie möchten.
Zum Beispiel wird (1.23e-7).toFixed(9)
als 0.000000123
Um in der Lage zu sein, diese mit sortierten Standard-String-Vergleichen zu sortieren, stellen Sie sicher, dass Sie ihnen alle Nullen voranstellen und sie alle gleich groß machen, damit die Dezimalpunkte in einer Reihe stehen.
Sie können das String-Objekt mit padLeft wie folgt erweitern:
%Vor% Jetzt können Sie ((1.23e-7).toFixed(9)).padLeft(15,'0')
Das Problem ist nicht parseFloat, sondern sort, das standardmäßig den Zeichenfolgenvergleich verwendet. Versuchen Sie, einen numerischen Vergleich zu erzwingen:
%Vor%Tags und Links javascript scientific-notation parsefloat