Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB6 | 13.04.11 |
Einheiten-Präfixe Die Funktion normiert und formatiert eine übergebene Zahl und erzeugt ein passendes Präfix dazu. | ||
Autor: Horst Laubmann | Bewertung: | Views: 9.784 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In der Technik werden Zahlen sehr schnell sehr groß oder auch klein. Sie werden dann i.d.R. im wissenschaftlichen Format notiert. Im Sprachgebrauch werden dann aber zur Abkürzung der Aussprache Präfixe benutzt.
Beispiel: 56,2 MegaOhm
Nachfolgender Code generiert aus einem Wert (-10E24 < Zufallszahl < 10E24) eine auf 3 Nachkommastellen formatierte Zahl mit passendem Präfix.
Netter Nebeneffekt: die großen Zufallszahlen ! Viel Spaß.
Erstellen Sie für das Beispielprojekt ein neues Projekt mit einem Command-Button "Cmd_Zufallszahl", sowie 2 Label-Controls "lbl_Zufallszahl" und "lbl_Ausgabe".
Private Sub Cmd_Zufallszahl_Click() ' eine geeignete Zufallszahl von -10E24 bis 10E24 generieren: ' Mantisse und Exponent wird separat erzeugt! Dim iExponent As Integer Dim sZufallszahl As Single Randomize iExponent = Int(49 * Rnd - 24) ' Exponent -24 bis 24 sZufallszahl = 2 * Rnd - 1 ' von -1 bis (fast) +1 sZufallszahl = sZufallszahl * (10 ^ iExponent) ' unbehandelt ausgeben lbl_Zufallszahl.Caption = sZufallszahl ' behandelt ausgeben lbl_Ausgabe.Caption = FindePräfix(sZufallszahl) End Sub
' Formatiert die Zahl und erzeugt einen passenden Einheiten-Präfix ' Rückgabe als String Public Function FindePräfix(ByVal Wert As Single) As String Dim iExpo As Integer Dim Präfix As String iExpo = 0 ' Wert testen und normieren... If Wert <> 0 Then ' positiv oder negativ If Wert > 0 Then ' Wert positiv While Wert < 1 ' milli, mikro oder so Wert = Wert * 1000: iExpo = iExpo - 1 Wend While Wert >= 1000 ' Kilo, Mega oder so Wert = Wert * 0.001: iExpo = iExpo + 1 Wend Else ' Wert negativ While Wert > -1 Wert = Wert * 1000: iExpo = iExpo - 1 Wend While Not Wert > -1000 Wert = Wert * 0.001: iExpo = iExpo + 1 Wend End If End If ' ...Präfix aufbereiten Select Case iExpo Case -8: Präfix = "yokto" Case -7: Präfix = "zepto" Case -6: Präfix = "atto" Case -5: Präfix = "femto" Case -4: Präfix = "pico" Case -3: Präfix = "nano" Case -2: Präfix = "mikro" Case -1: Präfix = "milli" Case 0: Präfix = "" Case 1: Präfix = "Kilo" Case 2: Präfix = "Mega" Case 3: Präfix = "Giga" Case 4: Präfix = "Tera" Case 5: Präfix = "Peta" Case 6: Präfix = "Exa" Case 7: Präfix = "Zetta" Case 8: Präfix = "Yotta" End Select FindePräfix = Format$(Wert, "0.000") & " " & Präfix End Function