vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 16:12

Hallo,

ich habe in einer DatagridviewColumn vom ValueType Single eine Ziffer mit 10 Nachkommastellen. Warum rundet die ToString-Methode auf 8 Stellen?

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: sv00010
Datum: 21.03.17 18:49

CAM-Andi schrieb:
Zitat:

Hallo,

ich habe in einer DatagridviewColumn vom ValueType Single
eine Ziffer mit 10 Nachkommastellen. Warum rundet die
ToString-Methode auf 8 Stellen?


Auf 8 oder auf 6 ?
Wenn du es anders haben willst, dann musst du die Funktion .ToString mit IFormatProvider aufrufen.

Zitat:


Die ToString() -Methode formatiert einen Single Wert in der Standardeinstellung ("G" oder Allgemein) Format der aktuellen Kultur. Wenn Sie ein anderes Format oder eine Kultur angeben möchten, verwenden Sie die anderen Überladungen der der ToString -Methode


https://msdn.microsoft.com/de-de/library/w5dbkt9x(v=vs.110).aspx

https://msdn.microsoft.com/de-de/library/dwhawy9k(v=vs.110).aspx
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 21.03.17 19:39

Hallo!

Schau Dir den Datentyp Single genauer an.
Das ist eine 4-Byte-Gleitkommavariable, die nach dem IEEE-Format intern
in Mantisse, Exponent und Vorzeichenkennung gegliedert ist.
Im Zehnersystem ausgedrückt, gibt es nur eine Genauigkeit von etwa sieben
bis acht Ziffern (Vor- und Nachkommastellen zusammen!).
Alternativ kannst Du für Gleitkomma-Zahlen die Typen Double oder Decimal verwenden.
Beide bieten höhere Genauigkeit, wobei Double eine hohe Wertespannweite bei
ca. 14 Stellen Genauigkeit /Vor- und Nachkmma) bietet, während Decimal bei
geringer Wertespannweite und niedriger Rechengeschwindigkeit eine exakte
Darstellung von ca. 28 Stellen bietet.

Das IEEE-Format "taktet" intern die Darstellungsgenauigkeit, abhängig von der
absoluten Ausprägung des enthaltenen Zahlenwertes: je größer, desto weniger genau.
Bei Wertvergleichen muß deshalb stets eine geeignete Differenz eingeführt werden,
innerhalb der zwei Zahlenwerte noch als "gleich" gelten.

Beitrag wurde zuletzt am 21.03.17 um 19:50:47 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 19:44

Hallo sv00010,

danke für die Mail. Ich möchte alle Nachkommastellen anzeigen, aber nur wenn vorhanden. Mit deinen Tipps kam ich nicht weiter. Die ToString-Methode von DatagridviewCell.Value erbt von System.Object und hat keine Parameter. Folgendes habe ich versucht, leider ohne Erfolg:
Dim nfi1 As NumberFormatInfo = New CultureInfo("en-US", False).NumberFormat
nfi1.NumberDecimalDigits = 10
txt_Vc.Text = Convert.ToDecimal(CurrentRow.Cells("Vc").Value, nfi1).ToString( _
  nfi1)
Es wird immer auf 8 Stellen aufgerundet. Was mache ich falsch?

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 19:50

Hallo Manfred X,

danke für deine Nachricht. Im DataGriedView werden alle Stellen angezeit. Beispiel: 0.0188495554 und ValueType ist Single (kommt von einer SQL-Abfrage, DataGriedView ist ungebunden). Wie musst ich deine Ausführung verstehen?

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 21.03.17 20:00

Du mußt Dir Gedanken über die Genauigkeit Deiner Daten machen.
Gleitkomma-Werte sind oft Meßergebnisse, bei deren Verwendung (Rundung)
neben der (begrenzten) Genauigkeit der binären Darstellung ggf. auch die
Größe der Meßfehler zu berücksichtigen ist.

Single-Werte, die im Bereich -100 bis +100 liegen, würde ich auf maximal 5
Nachkommastellen runden; Single-Werte im Bereich -9 bis +9 auf maximal 6
Nachkommastellen.

In Deinem Fall scheint es sich um sehr kleine Werte (nahe 0) zu handeln.
In dem Fall kann auch eine Rundung auf 8 Stellen geeignet sein. Das wären
in Deinem Beispiel 7 gültige Ziffern (1884955).

Es kann allerdings sein, daß die Datenbank einen anderen Datentyp verwendet
und erst bei der SQL-Abfrage eine Umwandlung auf Single vorgenommen worden ist.
In dem Fall würde ich die Abfrage anpassen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 20:04

Ich brauche die Nachkommastellen um Rundungsungenauigkeiten zu minimieren. Sonst würde ich da nicht darauf herumreiten. Mir ist bekannt, wodurch die Nachkommastellen entstehen und wo sie gebraucht werden. Der SQL-Datentyp ist "real".

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 21.03.17 20:21

Der Datentyp Real ist in SQL-Dialekten nicht eindeutig definiert.
Meist entspricht er 24-Bit und korrespondiert mit dem VB-Typ Single.
Manchmal (z.B. MySql) ist es auch entsprechend dem VB-Typ Double realisiert.

Da mir derzeit nicht bekannt ist, wodurch diese Nachkommastellen bedingt sind,
kann ich Dir keinen Rat zum Vorgehen für die angemessene "Minimierung von
Rundungsungenauigkeiten" geben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 20:32

Die DB ist MS SQL. Es geht um die Berechnung von Umfangsgeschwindigkeiten mit sehr keinen Durchmessern. Meine genannte Spalte enthält die Rechenergebnisse und noch andere Werte. Wenn ich einzelne Felder der Datarow editiere, update ich normalerweise die ganze Datarow und dann soll mein genanntes Feld bei der Übergabe vom datagridview in eine Textbox nicht gerundet werden.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 21.03.17 21:08

Bei MS SQL entspricht "Real" dem Datentyp Single,
d.h. maximal sieben gültige Ziffern sind zuverlässig verfügbar.
Etwaige weitere nachfolgende Ziffern entsprechen meist nicht mehr genau
dem übergebenen Gleitkomma-Wert.

Ob es sinnvoll ist, technisch bedingte "Überhangziffern", die bei der
Rückrechnung des Dezimalwertes aus der binären Zerlegung entstehen,
in einer Textbox oder einem Grid anzuzeigen (oder bei Berechnungen
einzubeziehen), würde ich bezweifeln.

Abgesehen von der durch den Datentyp vorgegebenen Grenzgenauigkeit
wären bei der Rundung folgende Gesichtspunkte einzubeziehen:

Zunächst ist zu klären, mit welcher Genauigkeit die Durchmesser
(und die anderen rechen-relevanten Größen) bestimmt worden sind.
Auf diese fehlerbehafteten Eingabewerte der Berechnungsformel(n) für die
Umfangsgeschwindigkeit ist das Fehlerfortpflanzungsgesetz anzuwenden.
Daraus ergibt sich die Genauigkeit der gespeicherten Resultat-Werte
= die Anzahl der zuverlässigen signifikanten Stellen (max. 7).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 21.03.17 21:22

Hallo Manfred X,

danke für deine Mühe und Zeit. Jetzt verstehe ich die Diskrepanz. Das heißt, ich letzten Nachkommastellen kann ich vernachlässigen weil sie eh nicht zuverlässig sind.

Danke.

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Franki
Datum: 22.03.17 03:43

Hallo Andi,

tja das frage ich mich auch immer.

Irgendwas zu reinem Text umzuwndeln sollte ja eigentlich bedeuten, dass da gar nichts mathematisch verändert wird (gerundet oder was auch immer) Denn mit Texten kann man nicht rechnen, mit Datumsangaben als Text auch nicht usw. ToString (zu Text) sollte ja genau 1:1 abbilden im Text was da steht.

Also z.B. genau wie Copy und Paste in z.B. eine Textverarbeitung. Da sind dann auch deine Werte mit x Nachkommastellen vorhanden (!?)

Umgekehrt ist es narürlich anders, wenn man Text in irgendeine mathematisch verwertbare Form umwandeln möchte, dann muss geprüft werden, ob das klappt oder nicht.

Also Frage an die Allgemeinheit hier: Warum möchte ToString überhaupt irgend etwas "umwandeln, berechnen usw."

Das sollte eigentlich nicht sein, da Text einfach nur Text ohne irgendeine mathematische Funktionalität ist.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 22.03.17 08:16

Hallo!


[I]Also Frage an die Allgemeinheit hier:
Warum möchte ToString überhaupt irgend etwas "umwandeln, berechnen usw."[/I]

In den meisten Fällen ist das die Anpassung der Zeichenfolge
an die jeweilige "Culture".

Es gibt aber andere Gründe für Transformationen abgefragter Werte.

Meßwerte besitzen eine begrenzte Genauigkeit und
Berechnungsresultate, die auf fehlerbehafteten Werten beruhen,
besitzen eine noch geringere Genauigkeit.
In einer Datenbank sollten zu jeder Meßwert-bezogenen Spalte
diesbezüglich geeignete Angaben hinterlegt werden.

Gleitkomma-Variablen rechnen mit der datentyp-spezifischen Genauigkeit,
d.h. es werden (auch in Zwischenergebnissen) zu viele Stellen erzeugt.
Man muß deshalb bei den einzelnen Berechnungsschritten immer wieder
geeignete Rundungen vornehmen.
Eine Aufbereitung ist meist auch bei der Dialog-Anzeige fehlerbehafteter
Werte aus Datenbanken erforderlich.
Oft ist die Rundung auf eine bestimmte Zahl von Dezimalstellen dafür wenig geeignet.
Der Genauigkeit kann besser entsprochen werden, z.B. durch Rundung auf halbe
Dezimalen (z.B. 1,0 / 1,5 / 2,0 / 2,5 usw.) oder viertel (1,0 / 1,25 / 1,5 / 1,75 / ...)
Eine Alternative ist die Anzeige der Grenzen eines Sicherheitsintervalls zu jedem
abgefragten Wert.

Auch bei Datumsangaben sind mitunter Aufbereitungen erforderlich.
Findet z.B. während in einer Arbeitsschicht ein Tageswechsel statt, wird der in den
gespeicherten Ablaufdaten (Datum und Zeit) beachtet.
Bei bestimmten Fragestellungen werden die Arbeitsschichten dem Datum des Arbeitsbeginns
zugeordnet und dieser gespeicherte Tageswechsel deshalb ignoriert (Umrechnung des
tatsächlichen Zeitpunkts eines Ereignisses auf das Datum des Schichtbeginns).

Kurzum: Man führt meistens eine Zwischenschicht im Programm ein, in der die
Datenbank-Angaben für die Benutzer-Oberfläche (parameter-gesteuert) transformiert werden.

Beitrag wurde zuletzt am 22.03.17 um 08:23:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 22.03.17 08:30

Hallo Manfrad X,

danke für die Erklärungen. Genau das habe ich nun auch vor. Das Aufbereiten der Daten vor dem Anzeigen. Des Weiteren habe ich hier interessantes dazugelernt.

Danke nochmals

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: CAM-Andi
Datum: 22.03.17 09:17

Das heißt für mich aber auch, dass ich die ToString-Methode total unterschätzt habe...

Grüße Andi

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 22.03.17 09:30

Nicht alle Beispiele, die ich gegeben habe, sind über die
"ToString"-Methode direkt zu realisieren.
"ToString" bietet allerdings eine Vielzahl von Standard- und benutzerspezifischen
Formatierungen für den jeweiligen Datentyp, die in Kombination mit eigenen
Transformationsroutinen einsetzbar sind.
Des weiteren kann man z.B. eine NumberformatInfo-Instanz erstellen
und dort festlegen, wie die Umwandlung von diversen Zahlen-Elementen in
Zeichen(folgen) vorgenommen werden soll.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Kuno60
Datum: 22.03.17 17:09

Hallo,

ToString formatiert einen Single-Wert immer in maximal 7 Stellen nach dem Komma. Mehr macht bei Single auch keinen Sinn. Bei Double sind es max. 14 Stellen.
So wie Manfred schon schrieb, haben Single-Werte manchmal mehr als 7 Stellen, die man sich mit ToSting("G9") anzeigen lassen kann. Einen Nutzen hat das jedoch nicht.
Statt G kann auch F oder N verwendet werden, dabei werden fehlende Stellen nach dem Komma mit Nullen aufgefüllt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Franki
Datum: 23.03.17 01:47

Hallo ManfredX,

danke für deine ausführliche Antwort.

Zitat:


Auch bei Datumsangaben sind mitunter Aufbereitungen
erforderlich. Findet z.B. während in einer Arbeitsschicht ein Tageswechsel
statt, wird der in den gespeicherten Ablaufdaten (Datum und Zeit) beachtet.


Ja so sollte es sein, aber leider ist es oft in der Praxis nicht so denn es werden nur Uhrzeiten ohne Datum in der DB gespeichert. (Arbeitsbeginn / Arbeitsedne sonst nichts)
Und die Umstellung auf die demnächst anstehende Sommerzeit schon gar nicht.
Das hängt aber auch oft von den verwendeten Stempeluhren der Firmen ab die nur die Uhrzeiten speichern bzw. protokollieren.

Zitat:


Bei bestimmten Fragestellungen werden die Arbeitsschichten
dem Datum des Arbeitsbeginns
zugeordnet und dieser gespeicherte Tageswechsel deshalb
ignoriert (Umrechnung des
tatsächlichen Zeitpunkts eines Ereignisses auf das Datum des
Schichtbeginns).


Genau so sollte es sein, ist es aber oft nicht.

Zitat:


Kurzum: Man führt meistens eine Zwischenschicht im Programm
ein, in der die Datenbank-Angaben für die Benutzer-Oberfläche
(parameter-gesteuert) transformiert werden.


Genu diese ist wichtig, ohne diese geht es einfach nicht. Sich nur auf ToString oder damals unter VB6 auf FormatNumber/FormatDateTime usw. zu verlassen reichte noch nie und reicht auch heute nicht.

Das mit der .Culture gab es damals noch nicht, ist zwar ein Fortschritt, aber grade bei den Datumsberechnungen bzw. Berechnung zwischen Zeitdifferenzen werden aber auch heute noch keine Umstellungen auf Sommerzeit (und zurück) berücksichtigt. Das musste ich schon vor 20 Jahren per Hand programmieren.

Alle Anpassungen die notwendig sind erledige ich in meinen Programmen aber bei der Eingabe der User oder bei der Umwandlung von Kundendaten. Denn das bringt in Sachen Geschwindigkeit erhelbliche Vorteile.

Ein Datensatz wird einmal eingetragen und x fach gelesen. Also ist es doch sinnvoller die nötigen Berechnungen, Kontrollen usw. vor dem Eintrag in die DB zu erledigen anstatt dies beim Lesevorgang x fach zu machen.

Grade bei heutzutage üblichen Onlineanwendungen, Mobilen Endgeräten mit wenig Leistung, Bandbreitenbeschränkung usw. bringt das einen erhelblichen Vorteil

Also mein Fazit:
Du gibst wichtige und richtige Tipps, aber Vorbeugen ist besser als Heilen, das gilt nicht nur im Gesundheitsbereich sondern auch bei Datenbanken und Programmierung. Und wenn man alle deine Tipps berücksichtigt, dann bin ich immer noch der Meinung, dass man tostring nicht dafür missbrauchen sollte um z.B. ein Datum oder einen Euro Betrag nur optisch aufzubereiten oder sich auf die Umwandlungsfuntionen zu verlassen wenn die Daten aus einer DB kommen. Da hat man dafür zu sorgen, dass diese da richtig drin stehen.

Von internationalen Anwendungen mal abgesehen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tostring Nachkommastellen 
Autor: Manfred X
Datum: 23.03.17 12:54

Hallo!

Bei der Nutzung von Datenbanken im Rahmen der Verarbeitung von Meß-Ergebnissen
sind zwei Grundstrategien zu unterscheiden.

Sollen die Messungen dokumentiert werden, wird das gesamte Meßprotokoll in
die Datenbank aufgenommen, also z.B.:
- gemessene Rohwerte
- Zeitpunkt / Ort der Messung
- Genauigkeit / Kontrollmessungen / Fehlerfunktion
- verwendetes Meßgerät (incl. Kalibrierungswerte, Justierungen)
- verwendetes Meßprogramm (Version, Steuer-Parameter)
- Person, die die Messung verantwortet
usw.
Eine Aufarbeitung der Daten des Protokolls findet vor Übertragung in die Datenbank
nicht statt. Erst bei den Datenbank-Abfragen werden diese Angaben zweckgerichtet
aufbereitet.

Werden Messungen für ganz bestimmte Zwecke durchgeführt, findet das zumeist im
Rahmen eines gegebenen Versuchsplans statt. In dem Fall werden die Daten
zunächst ausgewertet (statistisch analysiert oder geeignete Kennwerte berechnet).
In der Datenbank werden nicht die Daten selbst, sondern die daraus abgeleiteten
Ergebnisse abgelegt.

In der Praxis wird beides mitunter vermischt, d.h. Meßwerte werden überarbeitet,
korrigiert, gefiltert, transformiert u.a. ehe sie gespeichert werden.
Wenn dies nicht einer zielgerichteten Systematik folgt, [u]gehen eventuell wichtige
Informationen verloren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel