Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  Größenvergleich einer Double-Zahl spinnt

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Patrick Weber an!   Senden Sie eine Private Message an Patrick Weber  Schreiben Sie einen Gästebucheintrag für Patrick Weber

Beiträge: 657
Registriert: 20.11.2006

erstellt am: 25. Okt. 2011 12:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Patrick Weber an!   Senden Sie eine Private Message an Patrick Weber  Schreiben Sie einen Gästebucheintrag für Patrick Weber

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 25. Okt. 2011 13:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 nicht

Aber 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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

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...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 25. Okt. 2011 15:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz