VB | Ergebnis nicht runden lassen

...komplette Frage anzeigen

2 Antworten

"...eine Möglichkeit?" -> es gibt sehr viele!!!
ABER man geht anders an eine Aufgabe ran:
Was will man, wie schnell mit welcher Genauigkeit berechnen!
Das Pure Basic 64 Bit ist sehr viel schneller, kostenlos und erzeugt kleinere EXE als das das aufgeblasene, von zig GB abhängige VB.NET.
Übrigens: jeder Win-PC hat bereits das VBS (VB Interpreter Script-Sprache) integriert, d.h. keine Installation von Fremdprogrammen nötig!

Wenn 15 Nachkommastellen reichen, nimmt man den Typ Double.
Fast jede Sprache hat Pi bereits definiert, aber man kann auch leicht berechnen lassen:
Dim pi As Double = ATan(1) * 4
oder ASin(1) * 2
(kenne noch über 100 weitere)

Wichtig: bei jeder Berechnung immer nur Variablen gleichen Typs verwenden:
wenn Eingabe Text, dann: dVal = CDbl(TextBoxRadius.Text)
Damit man schon am Namen sieht, ob Variablen typgleich sind, kann man Buchstaben davor setzen:
dVal für Double
strText für Text
lVal für Long usw.

"...statt double long auch funktionieren?"
Fast jeder Variablentyp funktioniert, ABER komplizierter:
- nur mit der Genauigkeit der Variable
- wenn man im Gültigkeitsbereich der Variable bleibt

Gültigkeit von Long sind 32 Bit (-2147483648 bis +2147483647)
Um die Nachkommastellen weg zu bekommen einfach mit 100 Mio (1e8) multiplizieren:
lPi = 314159265
Dann statt 3/4 * lPi ...
(lPi * 3) / 4 (damit es ganze Zahlen bleiben)
Am Ende ein Komma erzeugen, indem man von hinten 8 Stellen nach links geht (z.B. mit Stringoperationen).
Höhere Funktionen sind dann aber zu kompliziert für die meisten...

Pure Basic hat auch noch Quad: -9223372036854775808 bis +9223372036854775807
Mit dem 64 Bit Compiler kann man so super schnelle Programme schreiben, da dieser Typ bei den Grundrechenarten viel schneller ist als Double.

Jede gute Programmiersprache hat aber auch Strings und Byte-Arrays um beliebig viele Nachkommastellen zu berechnen -> das wird dann aber eine andere Frage hier.

VB = VB.Net oder VB Classic

Bei VB.net musste ein double als Variablen-Typ nehmen und beim definieren der Variablen auch eine Fließkommazahl nehmen (anstatt 3 dann 3.0). [Oder war das ne Eigenart von java?]

Elrindir 14.07.2014, 21:10

Ob das jetzt zu java gehört weiß ich nicht. Ich geb dir ein Beispiel:

Dim pi As Integer = 3.141592654

TextBoxVolumen.Text = 3 / 4 * TextBoxRadius.Text ^ 3 * pi

Also wie du siehst, lass ich gleich die Zahl darstellen. Kann ich da überhaupt noch TextBoxVolumen.Text in double umwandeln?

Noch ne Frage: würde statt double long auch funktionieren?

0
AaronKl 14.07.2014, 21:30
@Elrindir

Also erstmal den Hinweis, dass ich mit VB nicht besonders viel anfangen kann vom Syntax her, weil ich mit C# arbeite.

Aber ich gebe mal von aus, dass 'Dim pi As INTEGER' also einen Integer darstellt. Somit rechnet es nur mit 3, weil ein Integer eine Ganzzahl ist. Vermutlich wird ein 'Dim pi As Double' entsprechendes Ergebnis erzielen.

1
SourceMaker96 15.07.2014, 18:23
@AaronKl

Wie AaronKl schon gesagt hat ist eine Integer Variable nur für Ganzzahlen bestimmt, also 1,2,3.. du brauchst eine vom Typen Double. Jedoch wird PI in .NET bereits mitgeliefert.

Ein halbwegs sauberer Code sähe übrigens so aus:

TextBoxVolumen.Text = (3 / 4 * CDbl(TextBoxRadius.Text) ^ 3 * Math.PI).ToString

Mit einer rundung auf zwei nachkomma Stellen sähe das ganze so aus:

TextBoxVolumen.Text  = (Math.Round(3 / 4 * CDbl(TextBoxRadius.Text) ^ 3 * Math.PI, 2)).ToString

die ", 2" geben dabei die Nachkommastellen an. Um dich direkt an saubere programmierung zu gewöhnen. Schreibe ganz oben in deinem Code:

Option Strict On

Hoffe ich konnte helfen :)

1

Was möchtest Du wissen?