Hier ist das Beispiel, das mich stört:
%Vor%Gibt es eine Möglichkeit, eine technische Notation für die Darstellung von mili (10e-3) und micro (10e-6) zu haben?
Hier ist eine Funktion, die Dinge explizit tut und auch die Verwendung von SI-Suffixen für den Exponenten unterstützt:
%Vor% Das Modul decimal
folgt der Decimal Arithmetic Specification , die besagt:
to-scientific-string - Umwandlung in numerische Zeichenfolge
[...]
Der Koeffizient wird zuerst in eine Zeichenkette in der Basis zehn umgewandelt, wobei die Zeichen 0 bis 9 ohne vorangestellte Nullen verwendet werden (außer wenn sein Wert Null ist, in diesem Fall wird ein einzelnes 0 Zeichen verwendet). Als nächstes wird der angepasste Exponent berechnet; Dies ist der Exponent plus die Anzahl der Zeichen im konvertierten Koeffizienten minus eins. Das heißt, Exponent + (Länge-1), wobei Länge die Länge des Koeffizienten in Dezimalziffern ist.
Wenn der Exponent kleiner oder gleich Null ist und der angepasste Exponent größer oder gleich -6 ist, wird die Zahl umgewandelt zu einer Zeichenform ohne exponentielle Notation zu verwenden.
[...]
to-engineering-string - Umwandlung in numerische Zeichenfolge
Dieser Vorgang konvertiert eine Zahl mithilfe von Engineering in eine Zeichenfolge Notation, wenn ein Exponent benötigt wird.
Die Umwandlung folgt genau den Regeln für die Konvertierung in wissenschaftliche numerischer String , außer im Falle von endlichen Zahlen, wo exponentiell ist Notation wird verwendet.
Oder mit anderen Worten:
%Vor% Das Modul decimal
folgt tatsächlich dem proprietären (IBM) Dezimale arithmetische Spezifikation.
Die Angabe dieser IBM Spezifikation in ihrer Gesamtheit zeigt deutlich, was mit decimal.to_eng_string()
(Hervorhebung hinzugefügt) falsch ist:
to-engineering-string - Umwandlung in numerische Zeichenfolge
Dieser Vorgang konvertiert eine Zahl mithilfe von Engineering in eine Zeichenfolge Notation, wenn ein Exponent benötigt wird.
Die Umwandlung folgt genau den Regeln für die Konvertierung in wissenschaftliche numerischer String mit Ausnahme von bei endlichen Zahlen wo exponentiell ist Notation wird verwendet. In diesem Fall wird der konvertierte Exponent auf ein Vielfaches von drei (technische Notation) eingestellt, indem der Dezimalpunkt mit einem, zwei oder drei vorangestellten Zeichen (dh dem Teil vor dem Dezimalzeichen) positioniert wird Punkt reicht von 1 bis 999). Dies kann das Hinzufügen von einer oder zwei abschließenden Nullen erfordern.
Wenn nach der Anpassung auf den Dezimalpunkt keine Ziffer folgt, wird diese nicht hinzugefügt. Wenn der abschließende Exponent Null ist, dann wird kein Indikator Buchstabe und Exponent suffixiert.
Diese proprietäre IBM Spezifikation gibt zu, die technische Notation für Zahlen nicht mit einer unendlichen Dezimaldarstellung
Quelle: Ссылка
Ich stelle fest, dass dies ein alter Thread ist, aber er kommt fast ganz oben auf der Suche nach python engineering notation
und es scheint ratsam, diese Informationen hier zu haben.
Ich bin ein Ingenieur, der die technischen Einheiten "Engineering 101" mag. Ich mag nicht einmal Bezeichnungen wie 0.1uF
, ich möchte das 100nF
lesen. Ich habe mit der Decimal
-Klasse gespielt und ihr Verhalten über den Bereich der möglichen Werte nicht wirklich gemocht, also habe ich ein Paket namens engineering_notation
gerollt, das pip-installierbar ist.
Aus Python heraus:
%Vor%Dieses Paket unterstützt auch Vergleiche und andere einfache numerische Operationen.
Basierend auf Julian Smiths exzellenter Antwort (und dies Antwort), habe ich die Funktion geändert, um die folgenden Punkte zu verbessern:
also hier ist die aktualisierte Funktion:
%Vor%Tags und Links python python-2.7 decimal