Python Decimal - technische Schreibweise für mili (10e-3) und micro (10e-6)

8

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?

    
TheMeaningfulEngineer 31.07.2013, 14:32
quelle

5 Antworten

6

Hier ist eine Funktion, die Dinge explizit tut und auch die Verwendung von SI-Suffixen für den Exponenten unterstützt:

%Vor%     
Julian Smith 09.10.2013 11:32
quelle
4

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%     
Zero Piraeus 31.07.2013 15:29
quelle
2

Das "vollständige" Zitat zeigt, was falsch ist!

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 , für die stattdessen die übliche wissenschaftliche Notation verwendet wird! Dies ist offensichtlich ein inkorrektes Verhalten, für das ein Python-Fehlerbericht geöffnet wurde.

Lösung

%Vor%

Quelle: Ссылка

Testergebnis

%Vor%     
Serge Stroobandt 27.01.2016 18:27
quelle
2

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.

%Vor%

Aus Python heraus:

%Vor%

Dieses Paket unterstützt auch Vergleiche und andere einfache numerische Operationen.

Ссылка

    
slightlynybbled 05.09.2017 11:19
quelle
2

Basierend auf Julian Smiths exzellenter Antwort (und dies Antwort), habe ich die Funktion geändert, um die folgenden Punkte zu verbessern:

  • Python3-kompatibel (ganzzahlige Division)
  • Kompatibel für 0 Eingabe
  • Rundung auf eine signifikante Anzahl von Ziffern, standardmäßig 3, keine abschließenden Nullen gedruckt

also hier ist die aktualisierte Funktion:

%Vor%     
poppie 19.11.2016 09:23
quelle

Tags und Links