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]

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

    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!