Autor
|
Thema: Größenvergleich einer Double-Zahl spinnt (2053 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** Dell Precision 7540 mobile Workstation, 64GB, Quadro RTX 3000; SWX2020 SP5; SAP/PLM+ECTR; DriveWorks Pro; Programmierung: VBA, aktuell Visual Studio 2017/VB.Net
|
erstellt am: 25. Okt. 2011 12:06 <-- editieren / zitieren --> Unities abgeben:
Hallo VB.net-Experten, ich versteh meine Kiste nicht. Ich bekomme durch eine Berechnung einen Double-Wert, den ich dann in Abhängigkeit von seiner Größe auf bestimmte Nachkommastellen runden will. Im Prinzip ganz einfach, in der Praxis klemmts. Hier mein bisheriger Code: Code: Sub Berechne() Dim dblEndgewicht As Double Dim dblGewicht As Double Dim test As Double 'Berechnet den endgültigen Wert aus dem Inhalt von tbGewicht und dem ausgewählten Zuschlag dblGewicht = CDbl(tbGewicht.Text) dblEndgewicht = dblGewicht + dblGewicht * Zuschlag(lbZuschlaege.SelectedIndex) 'runden: Select Case dblEndgewicht Case dblEndgewicht > 1 And dblEndgewicht <= 10 lblErgebnis.Text = Format(dblEndgewicht, "#,#0.00") + "0" Case dblEndgewicht > 10.0 And dblEndgewicht <= 50.0 lblErgebnis.Text = Format(dblEndgewicht, "#,#0.0") + "00" Case dblEndgewicht > 50 lblErgebnis.Text = Format(dblEndgewicht, "#0") + ",000" Case Else lblErgebnis.Text = Format(dblEndgewicht, "#,#0.000") End Select 'Ergebnis in Zwischenablage: My.Computer.Clipboard.SetText(lblErgebnis.Text) End Sub
Das Problem: Egal, was für ein Wert in dblEndgewicht steht, ich lande immer im "Case Else"-Zweig. Versteh die Welt nicht mehr, brauch ich für Double-Vergleiche andere Operatoren?
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 sw: WinXPPro SP2 Office2007 SP1 Civil3D 2010 SP2 ET; DACH; Extensions STRATIS bis 12.1 ARRIBAbauen 12.4 ARRIBAfinanzen ------------------- hw: NVIDIA GeForce FX 5200 onboard: Intel 82865G 2x 20" 3GHz, 2GB RAM
|
erstellt am: 25. Okt. 2011 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Winzige Syntaxproblemchen? Statt Code: Case dblEndgewicht > 1 And dblEndgewicht <= 10
ein Code: Case 1 To 10
oder als Beispiel für die nächsten Zeile Code: Case Is > 10# And dblEndgewicht <= 50#
verwendet, läuft's. Hilft Dir das weiter?------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006
|
erstellt am: 25. Okt. 2011 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Nach Case kann entweder ein Wert stehen, mehrere Werte durch Kommata getrennt oder zwei Werte mit allen Zwischenwerten mit einem To verbunden oder auch Is und ein Vergleichsoperator. ------------------ Grüße aus Sachsen pw Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 25. Okt. 2011 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Code: Select Case True Case (dblEndgewicht > 1 AndAlso dblEndgewicht <= 10) lblErgebnis.Text = Format(dblEndgewicht, "#,#0.00") + "0" Case (dblEndgewicht >= 10 AndAlso dblEndgewicht <= 50) lblErgebnis.Text = Format(dblEndgewicht, "#,#0.0") + "00" Case (dblEndgewicht > 50) lblErgebnis.Text = Format(dblEndgewicht, "#0") + ",000" Case Else lblErgebnis.Text = Format(dblEndgewicht, "#,#0.000") End Select
wäre ebenfalls eine Variante. ------------------ Grüße aus Sachsen pw Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 25. Okt. 2011 13:38 <-- editieren / zitieren --> Unities abgeben:
Asche über mein Haupt! Die Syntax Case dblEndgewicht > ... ist natürlich Unsinn. Die Variante Code: Case 1 To 10
usw. funktioniert zwar gundsätzlich, hier sind die Grenzen aber immer mit drin, passt mir also nicht.
Code: Case Is > 10# And dblEndgewicht <= 50#
funzt nichtAber der letzte Vorschlag von Patrick ist der Hammer funktioniert prächtig, man muss wohl ab und an von hinten denken! Herzlichen Dank!
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 25. Okt. 2011 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus Wegen den unterschiedlichen Dezimaltrennzeichen, würde ich es so schreiben: Code: Select Case True Case (dblEndgewicht > 1 AndAlso dblEndgewicht <= 10) lblErgebnis.Text = Math.Round(dblEndgewicht, 2).ToString("#,#0.000") Case (dblEndgewicht > 10 AndAlso dblEndgewicht <= 50) lblErgebnis.Text = Math.Round(dblEndgewicht, 1).ToString("#,#0.000") Case (dblEndgewicht > 50) lblErgebnis.Text = Math.Round(dblEndgewicht, 0).ToString("#,#0.000") Case Else lblErgebnis.Text = Math.Round(dblEndgewicht, 3).ToString("#,#0.000") End Select
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. [Diese Nachricht wurde von HenryV am 25. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2657 Registriert: 06.11.2000
|
erstellt am: 25. Okt. 2011 15:17 <-- editieren / zitieren --> Unities abgeben:
@Henry: Auch das ist ein guter berechtigter Hinweis. Da ich jedoch inzwischen nicht nur runden, sondern immer aufrunden muss, sieht's jetzt so aus: Code: Sub Berechne() Dim dblEndgewicht As Double Dim dblGewicht As Double Dim Faktor As Integer 'Berechnet den endgültigen Wert aus dem Inhalt von tbGewicht und dem ausgewählten Zuschlag dblGewicht = CDbl(tbGewicht.Text) dblEndgewicht = dblGewicht + dblGewicht * Zuschlag(lbZuschlaege.SelectedIndex) 'runden: Select Case True Case (dblEndgewicht > 1 AndAlso dblEndgewicht <= 10) Faktor = 1000 Case (dblEndgewicht > 10 AndAlso dblEndgewicht <= 50) Faktor = 100 Case (dblEndgewicht > 50) Faktor = 10 Case Else Faktor = 1 End Select ' Auf definierte Dezimalstelle aufrunden dblEndgewicht = (Math.Ceiling(dblEndgewicht * Faktor)) / Faktor lblErgebnis.Text = Format(dblEndgewicht, "#,#0.000") 'Ergebnis in Zwischenablage: My.Computer.Clipboard.SetText(lblErgebnis.Text) End Sub
Herzlichen Dank noch mal an die Runde für die prompte Hilfe! ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... | Nasenheim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|