Expotential in Fließkomma und zurück...
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Expotential in Fließkomma und zurück...
Hallo zusammen...
Ich habe mal ein wenig rumgestöbert, aber leider keine Lösung für mein Problem gefunden - vielleicht weiß ja einer von Euch eine Lösung.
Also, ich habe eine Tabelle mit einer Reihe von Messwerten die ungefähr so aussieht
[img]
http://www.sfoerster.com/temp/table1.bmp
[/img]
Wie man erkennen kann stehen hier sowohl Werte im Wissenschaftlichen (Expotential) als auch im Fließkomma-Format.
Wenn ich mir diese Liste anschaue, möchte ich gerne zwischen einer von beiden Ansichten auswählen können.
Das heißt, ich brauche eine Routine, welche mir eine Wissenschaftliche Zahl in eine Fließkommazahl bzw. umgekehrt umwandeln kann.
Sinn der Sache ist es eigentlich nur die Lesbarkeit diese Tabelle zu erhöhen.
Hat einer eine Idee für mich oder einen Schnipsel?
Ich habe mal ein wenig rumgestöbert, aber leider keine Lösung für mein Problem gefunden - vielleicht weiß ja einer von Euch eine Lösung.
Also, ich habe eine Tabelle mit einer Reihe von Messwerten die ungefähr so aussieht
[img]
http://www.sfoerster.com/temp/table1.bmp
[/img]
Wie man erkennen kann stehen hier sowohl Werte im Wissenschaftlichen (Expotential) als auch im Fließkomma-Format.
Wenn ich mir diese Liste anschaue, möchte ich gerne zwischen einer von beiden Ansichten auswählen können.
Das heißt, ich brauche eine Routine, welche mir eine Wissenschaftliche Zahl in eine Fließkommazahl bzw. umgekehrt umwandeln kann.
Sinn der Sache ist es eigentlich nur die Lesbarkeit diese Tabelle zu erhöhen.
Hat einer eine Idee für mich oder einen Schnipsel?
Ich weis nicht ob das Zufall ist, aber auf deinem Bild sind die Zahlen immer nur mit Potenzen zu sehen die durch 3 teilbar sind. Das währe nicht die wissenschaftliche sondern die technische Schreibweise (also E3,E6,...), hingegen die wissenschaftliche Schreibweise achtet Darauf das nur eine Zahl > 0 vor dem Komma steht und nimmt jede Potenz. (also E1,E2,E3,...).
Ansonst dürfte das nicht so schwer sein. Du versetzt das Komma bei der wissenschaftlichen Schreibweise so das nur eine Zahl vorne steht und hängst hinten ein E und die Anzahl Zeichen die du es nach vorne versetzt hast ran. Wenn du das Komma nach "hinten" versetzt, etwa bei besonders kleinen Zahlen musst du die Zahl eben negieren.
Ansonst dürfte das nicht so schwer sein. Du versetzt das Komma bei der wissenschaftlichen Schreibweise so das nur eine Zahl vorne steht und hängst hinten ein E und die Anzahl Zeichen die du es nach vorne versetzt hast ran. Wenn du das Komma nach "hinten" versetzt, etwa bei besonders kleinen Zahlen musst du die Zahl eben negieren.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
hier n Procedure die die eine Zahl ins Wissenschaftliche übersetzt, also nur eine vorkommastelle:
Code: Alles auswählen
#Potenz = "*10^"
Procedure.s Format(Value.d, Length=-1)
Position = Log10(Value)
If Position
NewValue.d = Value * Pow(10, -Position)
If Length = -1
ProcedureReturn StrD(NewValue)+#Potenz+Str(Position)
Else
ProcedureReturn StrD(NewValue, Length)+#Potenz+Str(Position)
EndIf
Else
If Length = -1
ProcedureReturn StrD(NewValue)
Else
ProcedureReturn StrD(NewValue, Length)
EndIf
EndIf
EndProcedure
Debug Format(1000)
Debug Format(#PI/180)
Debug Format(1.5e-20)
Debug Format(1000,1)
Debug Format(#PI/180,1)
Debug Format(1.5e-20,1)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Das ist ja schonmal nicht schlecht, allerdings brauche ich die Ausgabe in
folgendem Format
Eingabe=0.00005432 Ausgabe=5.432E-5
Eingabe=0.0005432 Ausgabe=5.432E-4
Eingabe=0.005432 Ausgabe=5.432E-3
usw...
Eingabe=5.432 Ausgabe=5.432E0
Eingabe=54.32 Ausgabe=5.432E1
Eingabe=543.2 Ausgabe=5.432E2
usw...
Ich komme da irgendwie nicht weiter!
folgendem Format

Eingabe=0.00005432 Ausgabe=5.432E-5
Eingabe=0.0005432 Ausgabe=5.432E-4
Eingabe=0.005432 Ausgabe=5.432E-3
usw...
Eingabe=5.432 Ausgabe=5.432E0
Eingabe=54.32 Ausgabe=5.432E1
Eingabe=543.2 Ausgabe=5.432E2
usw...
Ich komme da irgendwie nicht weiter!

- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
[...]
Zuletzt geändert von HeX0R am 12.12.2008 10:16, insgesamt 1-mal geändert.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
So geht es "kurz, knackig und korrekt"
und auch unter Berücksichtigung von Null und negativen Werten:
Gruß, Little John

Code: Alles auswählen
; PB 4.30 beta 5
EnableExplicit
Procedure.s StrExp (value.d, decPlaces=-1)
Protected s.s, p=0
If value <> 0
p = Round(Log10(Abs(value)), #PB_Round_Down)
value * Pow(10, -p)
EndIf
If decPlaces = -1
s = StrD(value)
Else
s = StrD(value, decPlaces)
EndIf
ProcedureReturn s + "E" + Str(p)
EndProcedure
;-- Demo
Debug StrExp(1)
Debug StrExp(27)
Debug StrExp(321)
Debug StrExp(1, 2)
Debug StrExp(27, 2)
Debug StrExp(321, 2)
Debug "---------------"
Debug StrExp(1.234)
Debug StrExp(12.34)
Debug StrExp(123.4)
Debug StrExp(1.234, 2)
Debug StrExp(12.34, 2)
Debug StrExp(123.4, 2)
Debug "---------------"
Debug StrExp(0.001234)
Debug StrExp(0.01234)
Debug StrExp(0.1234)
Debug StrExp(0.001234, 2)
Debug StrExp(0.01234, 2)
Debug StrExp(0.1234, 2)
Debug "---------------"
Debug StrExp(0)
Debug StrExp(0, 2)
Debug "---------------"
Debug StrExp(-0.001234)
Debug StrExp(-0.01234)
Debug StrExp(-0.1234)
Debug StrExp(-0.001234, 2)
Debug StrExp(-0.01234, 2)
Debug StrExp(-0.1234, 2)
Debug "---------------"
Debug StrExp(-1.234)
Debug StrExp(-12.34)
Debug StrExp(-123.4)
Debug StrExp(-1.234, 2)
Debug StrExp(-12.34, 2)
Debug StrExp(-123.4, 2)
Debug "---------------"
Debug StrExp(-1)
Debug StrExp(-27)
Debug StrExp(-321)
Debug StrExp(-1, 2)
Debug StrExp(-27, 2)
Debug StrExp(-321, 2)
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Das sieht sehr gut aus...
Mußte noch ein wenig dran basteln, da ich eine ganz spezielle Ausgabe brauche.
Meine wissenschaftlichen Zahlen MÜSSEN IMMER in der Form
5.85E00
5.85E01
5.85E-02
usw... angezeigt werden. Also müssen alle folgenden Nullen abgeschnitten
werden und der Exponent muß immer Zweistellig angezeigt werden. Der Hintergrund
ist eine Auswertesoftware im Vakuumbereich bis 1E-12 mbar, welche die Werte
in eine Tabelle ablegt. Diese Werte werden bis 1E-6 als Fließkomma und
darunter als Expotentialwert eingetragen (keine Ahnung was das soll)
Ich habe Deinen Code mal zurecht gebastelt und so klappts!
Nur müßte ich nun auch noch das ganze wieder zurückwandeln können, da
man sich die Werte entweder als Exponent oder als Fließkommazahl anzeigen
könne soll.
Hier Dein Schnipsel auf meine Bedürfnisse angepasst...
Jetzt werde ich mich an dem Zurückwandeln versuchen... THX ! 
Mußte noch ein wenig dran basteln, da ich eine ganz spezielle Ausgabe brauche.
Meine wissenschaftlichen Zahlen MÜSSEN IMMER in der Form
5.85E00
5.85E01
5.85E-02
usw... angezeigt werden. Also müssen alle folgenden Nullen abgeschnitten
werden und der Exponent muß immer Zweistellig angezeigt werden. Der Hintergrund
ist eine Auswertesoftware im Vakuumbereich bis 1E-12 mbar, welche die Werte
in eine Tabelle ablegt. Diese Werte werden bis 1E-6 als Fließkomma und
darunter als Expotentialwert eingetragen (keine Ahnung was das soll)

Ich habe Deinen Code mal zurecht gebastelt und so klappts!
Nur müßte ich nun auch noch das ganze wieder zurückwandeln können, da
man sich die Werte entweder als Exponent oder als Fließkommazahl anzeigen
könne soll.
Hier Dein Schnipsel auf meine Bedürfnisse angepasst...
Code: Alles auswählen
Procedure.s StrExp (Value.d)
Protected s.s, p=0, i.l
If Value <> 0
p = Round(Log10(Abs(Value)), #PB_Round_Down)
Value * Pow(10, -p)
EndIf
s = StrD(Value)
;Nachfolgende Nullen (aus StrD) abschneiden
For i=Len(s) To 1 Step-1: If Mid(s,i,1)<>"0": s=Left(s,i): Break: EndIf: Next
;Wenn Ganzzahl, dann die "0" hinter das Komma setzen
If p<>0
ProcedureReturn s + "E" + RSet(Str(p),2,"0")
Else
ProcedureReturn s + "0E" + RSet(Str(p),2,"0")
EndIf
EndProcedure

Hmm ... ist nicht weiter schlimm, aber warum hast Du das nicht gleich gesagt? Vorher hattest Du geschrieben:Ghosty1967 hat geschrieben:Mußte noch ein wenig dran basteln, da ich eine ganz spezielle Ausgabe brauche.
Meine wissenschaftlichen Zahlen MÜSSEN IMMER in der Form
5.85E00
5.85E01
5.85E-02
usw... angezeigt werden. Also müssen alle folgenden Nullen abgeschnitten
werden und der Exponent muß immer Zweistellig angezeigt werden.
... was ja nicht das gleiche ist.allerdings brauche ich die Ausgabe in
folgendem Format
Eingabe=0.00005432 Ausgabe=5.432E-5
Eingabe=0.0005432 Ausgabe=5.432E-4
Eingabe=0.005432 Ausgabe=5.432E-3
usw...
Eingabe=5.432 Ausgabe=5.432E0
Eingabe=54.32 Ausgabe=5.432E1
Eingabe=543.2 Ausgabe=5.432E2
usw...
Gruß, Little John
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln