Feedback

VB - Anzahl der Nachkommastellen einer Dezimalzahl bestimmen

Veröffentlicht von am 17.11.2011
(1 Bewertungen)
Dieses Snippet liefert die Anzahl der Nachkommastellen einer Double-Dezimalzahl. Damit keinesfalls durch mathematische Berechnungen Verfälschungen entstehen können, werden zur Auswertung String-Methoden verwendet. Das gültige Dezimal-Trennzeichen, welches von .NET bei der Umwandlung von Double nach String verwendet wird, wird den Culture-Einstellungen entnommen.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

    Public Function NachkommastellenAnzahl(ByVal Zahl As Double) As Integer
        Dim zahltext As String
        Dim anzahl As Integer
        Dim dezimaltrennzeichen As String
        '>>> gültiges Dezimaltrennzeichen holen, welches .NET gerade auch bei der Umwandlung von Double nach String in den String einsetzt  (kann auch ein String aus mehreren Zeichen sein)
        dezimaltrennzeichen = My.Application.Culture.NumberFormat.NumberDecimalSeparator.ToString
        '>>> Dezimalzahl in String umwandeln
        zahltext = Convert.ToString(Zahl)
        '>>> Zahlenstring umdrehen, so dass die Nachkommastellen vorne stehen
        zahltext = StrReverse(zahltext)
        '>>> Dezimaltrennzeichen im Zahlenstring suchen, anzahl wird entsprechend durch die Fundstelle im String bestimmt, da die Fundstelle nullbasiert ist
        anzahl = zahltext.IndexOf(dezimaltrennzeichen)
        '>>> Wird das Dezimaltrennzeichen nicht gefunden (Ergebnis: -1), so ist die Anzahl = 0
        If anzahl < 0 Then anzahl = 0
        '>>> RÜCKGABE
        Return anzahl
    End Function

1 Kommentare zum Snippet

Scavanger schrieb am 02.12.2011:
"Anzahl der Nachkommastellen" auch genannt Exponent ist bei der internen Zahlendarstellung von Gleitkommazahlen schon vorhanden. (Details bei Wikipedia: http://de.wikipedia.org/wiki/Gleitkommazahl).
Man muss sie nur sichtbar machen und muss dann keinen Zirkus mit Strings veranstalten wenn man mit Zahlen arbeitet.

Hier mal ein Beispiel, in zwar in C# und mit Decimal (da gibts es schon eine eingebaute Funktion um an Mantisse, Exponent zu kommen) aber das Prinzip ist dasselbe:


static int GetDecimalPlaceCount(decimal value)
{
// Alle Bits außer Exponent auf 0 setzen und nach rechts schieben um den Wert zu erhalten.
return (Decimal.GetBits(value)[3] & 0x0ff0000) >> 0x10;
}

Klarer wirds noch bei der Lektüre der Decimal.GetBits() Doku: http://msdn.microsoft.com/de-de/library/system.decimal.getbits(v=VS.80).aspx

Wen es noch interessiert wie man an Mantisse, Exponent bei Double kommt, sei dieser MSDN Blog empfohlen:
http://blogs.msdn.com/b/ericlippert/archive/2011/02/17/looking-inside-a-double.aspx

 

Logge dich ein, um hier zu kommentieren!