Autor
|
Thema: Textfeld als double einlesen, geschieht das automatisch ? (2593 mal gelesen)
|
Mario Wipf Mitglied Dipl. Ing. FH, MAS FHO BAE
Beiträge: 535 Registriert: 07.10.2003 AIS 9 SP3, AIS 10 WINDOWS XP Pro Fujitsu Siemens CELSIUS M430 Nvidia Quadro FX 1400 128 MB
|
erstellt am: 20. Jul. 2005 07:07 <-- editieren / zitieren --> Unities abgeben:
Hall allerseits !! Ich habe schon fast ein schlechtes Gewissen, dass ich im Moment der einzige bin der Fragen hat...ist echt den anderen alles klar ? :-) Folgendes: Ich habe ein kleines Beispiel gemacht, um mich ein wenig in VBA zu üben. Ziel dieser Übung ist es, aus einer bestehenden Excel-Tabelle drei Preise zu übernehmen (auslesen), mit der alten Marche zu multiplizieren und dann durch eine neue Marche zu dividieren, so dass neue Preise ausgegeben werden. Das ganze sieht aus wie in Bild 0002. Problem ist nun, wenn die Nachkommastellenbehafteten eingelesenen Werte weiter verrechnet werden, dann sehe ich in der Ausgabe "berechnung_click()" dass mir da bei den Resultaten falsche Nachkommastellen ausgegeben werden. Frage, "Merkt" VBA selber, dass ich den eingelesenen String als double weiterverwenden möchte und wenn nein, wie sage ich ihm das ? Und wenn er das selber merken sollte, bzw. als Standard definiert ist, woher kommen dann die falschen Nachkommastellen ? Gruss Mario P.S. Datei 0001 → Screenshot aus Entwicklungsumgebung Datei 0002 → Screenshot der Oberfläche Datei 0003 → Quellcode [Diese Nachricht wurde von Mario Wipf am 20. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Grebe Mitglied
Beiträge: 536 Registriert: 16.12.2002
|
erstellt am: 20. Jul. 2005 09:00 <-- editieren / zitieren --> Unities abgeben: Nur für Mario Wipf
Ich denke nicht, dass du der Einzige mit Problemen bist - aber es gibt halt auch noch andere Foren ... Zunächst solltest du einmal klären, woher der Fehler kommt. Wie genau die VAL-Funktion arbeitet weiß ich jetzt nicht, du könntest dir aber jeweils nach dem Einlesen eines Werte z.B. den Text und den umgewandelten Wert ausgeben lassen und diese miteinander vergleichen. Wenn diese übereinstimmen, liegt's schon mal nicht an der VAL-Funktion. Grundsätzlich ist jedoch anzumerken, dass aufgrund der rechnerinternen Zahlendarstellung gewisse Zahlen einfach nicht genau darstellbar sind. Dies betrifft vor Allem auch für uns ganz normal erscheinende Zahlen wie z.B. 0.5 (oder ähnliche, Nagel mich da nicht fest, es liegt halt daran, dass die Zahlen zur Basis 2 abgebildet werden). Somit scheint dann der Rechner bei einigen Zahlen "falsch" zu rechnen. Als Beispiel: In A1 1 eingeben; in A2 =A1-0,1; dann A2 runterzählen und staunen was rauskommt ... Wenn du in Excel im Tabellenblatt auf die selben Ergebnisse kommst wie in VBA, dies aber z.B. nicht mit den Taschenrechnerergebnissen übereinstimmt kannst du halt nichts dran ändern. So jetzt gibt's viel zu Probieren - bis später ! Mathias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mario Wipf Mitglied Dipl. Ing. FH, MAS FHO BAE
Beiträge: 535 Registriert: 07.10.2003 AIS 9 SP3, AIS 10 WINDOWS XP Pro Fujitsu Siemens CELSIUS M430 Nvidia Quadro FX 1400 128 MB
|
erstellt am: 20. Jul. 2005 09:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Mathias ! Danke für die Info, dann muss ich wohl wirklich ein wenig testen. Was ich mitlerweilen herausgefunden habe ist, dass irgendwo zwischen übernehmen aus Excel-sheet und auslesen in Textfelder die nachkommastellen verloren gehen und daher vermutlich dann auch die Fehler im Endergebnis stammen. Dann mach ich mich gleich mal auf die Suche hmmm das mit dem runterzählen ist besonders im Bereich von der theoretischen Null ganz interessant :-) ist vieleicht Noll doch nicht gleic Null :-) Gruss Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 20. Jul. 2005 17:51 <-- editieren / zitieren --> Unities abgeben: Nur für Mario Wipf
hmm, Schaue mal in der Onlinehilfe bei der Funktion Val nach ;-) mir scheint du hast in deiner Sheet Komma-Zahlen vorliegen? Code:
Sub tt() Dim a, b, c As Double a = 0.987654321 'ergebnis lokales-Fenster 0,987654321 b = Val(a) 'ergebnis lokales-Fenster 0 c = CDbl(a) 'ergebnis lokales-Fenster 0,987654321 gg = c*5 'ergebnis : gg : 4,938271605 : Variant/Double'alternativ a = ".987654321bla" b = Val(a) 'ergebnis lokales-Fenster 0,987654321 f = b*5 'ergebnis: f : 4,938271605 : Variant/Double c = CDbl(a) 'ergebnis error ;-) d = Cstr(a) 'ergebnis als String End Sub
Aus der Hilfe: Anmerkung Die Val-Funktion erkennt nur den Punkt (.) als gültiges Dezimalzeichen. Wenn Sie ein anderes Dezimalzeichen verwenden möchten (zum Beispiel bei internationalen Anwendungen), sollten Sie statt dessen die Funktion CDbl verwenden, um eine Zeichenfolge in eine Zahl umzuwandeln. [Diese Nachricht wurde von Thomas Harmening am 20. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mario Wipf Mitglied Dipl. Ing. FH, MAS FHO BAE
Beiträge: 535 Registriert: 07.10.2003 AIS 9 SP3, AIS 10 WINDOWS XP Pro Fujitsu Siemens CELSIUS M430 Nvidia Quadro FX 1400 128 MB
|
erstellt am: 21. Jul. 2005 08:21 <-- editieren / zitieren --> Unities abgeben:
Hallo !! Das mit den verflixten Komas habe ich auch gemekrt, aber ich hatte noch keinen Ansatz um das Problem in Angriff zu nehmen. Vielen Dank für Deine Tips !! ich habe es mal so auf die schnelle probiert und noch nicht hingekriegt, aber in einer ruhigen Minute werde ich mir das noch einmal alles anschauen :-) Gruss Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|