WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Visual Basic --> Kommastellen (http://www.wcm.at/forum/showthread.php?t=130614)

PunkTey 06.04.2004 17:19

Visual Basic --> Kommastellen
 
Hiho!

Möchte folgendes machen. Ich möchte alle Zahlen auf zwei Kommastellen reduzieren oder auffüllen. Die sollen aber nicht gerundet werden, sondern lediglich abgeschnitten.
Also zB:

16,50789 = 16,50 (und NICHT 16,5 :D)

Und, wenn ich nur 16 habe, soll dann 16,00 stehen!

THX

powerman 06.04.2004 17:48

hi,
zahlenformat 0.000.000,00 verwenden

PunkTey 08.04.2004 10:34

Wie würde das denn genau aussehen, wenn ich eine Variable in nem label ausgebe? wie soll ich das dann schreiben? =) plz beispiel =)

flinx 08.04.2004 11:17

Ev. hilft:
Zitat:

FormatNumber-Funktion

Beschreibung

Gibt einen als Zahl formatierten Ausdruck zurück.

Syntax

FormatNumber(Ausdruck[,AnzahlZiffernNachDezimalpunkt [,FührendeZifferAufnehmen [,ÜbergeordneteAlsNegativeZahlenVerwenden [,ZiffernGruppieren]]]])

PunkTey 08.04.2004 11:20

das würde dann also so aussehen müssen:

FormatNumber(LABELXY ,##)

?? =) oder mach ich das dann mit Nullen, wenn es um die Dezimalstellen geht?

PunkTey 08.04.2004 11:52

Also, ich hab da jetzt so ein kleines Prog geschrieben, damit ich das austesten kann! Folgendes hab ich geschrieben:

Private Sub cmdFormat_Click()
Dim EZahl As Long

EZahl = txtEingabe
FormatNumber (EZahl = 0)
Zahlenformat.lblAusgabe = EZahl

End Sub

und dabei rundet er mir. Ich hab das mit -1 und -2 ebenfalls versucht, also nicht nur mit Null, und er rundet mir auf eine Ganzzahl ohne Dezimalstellen.

Was mach ich denn da noch falsch? =)

PunkTey 08.04.2004 11:53

ach ja, und mit 1 .. 2 hab ich es auch versucht. also egal wie viele dezimalstellen ich ihm angabe, dass ich haben will .. er rundet mir einfach auf eine ganzzahl .. RUNDET .. genau das was ich ned will :D

Potassium 08.04.2004 12:31

nur so ne frage: wofür brauchst du das?

PunkTey 08.04.2004 12:33

hehe für meine projektarbeit in der schule, die ich bis nach ostern fertig haben muss. in dem programm geht es halt um preise und es gibt kaum preise mit 3 dezimalstellen. deshalb muss ich auf zwei abschneiden, weil kein schwein will mehr zahlen als es kostet :D deshalb nicht runden.
und das brauch ich halt sehr dringend und bald .. aba irgendwie hilft mir hier keiner so definitiv dass die sache mal geklärt wäre. kenn mich mit diesem formatbefehl halt einfach ned aus .. :) und synatx alleine hab ich ma selbst schon angesehen aba geholfen ned.

Potassium 08.04.2004 12:37

ich bin grad am versuchen. is zwar ziemlich umständlich aber imm großen und gnze funzt es schon.

Potassium 08.04.2004 12:39

so versuche es mal damit:
Code:

Option Explicit

Private Sub Form_Load()
Dim Kommastellen, Begin, Zahl

Zahl = 2.589734567867
'Zahl = 2454541.2
Begin = InStr(1, Zahl, ",")
If Begin > 0 Then
    Kommastellen = Mid(Zahl, Begin + 1, 2)
Else
   
End If



If Len(Kommastellen) = 0 Then
    Kommastellen = "00"
ElseIf Len(Kommastellen) = 1 Then
    Kommastellen = Kommastellen & 0
End If

Zahl = Mid(Zahl, 1, Begin - 1)
Zahl = Zahl & "," & Kommastellen
MsgBox Zahl
End Sub

ich hoffe das ist was du brauchst

PunkTey 08.04.2004 12:39

ja die sache is halt die .. dass ich 93 preise habe die alle auf zwei dezimalstellen abgeschnitten gehören. dsehalb sollte s ned allzu viel aufwändig sein .. wei ldas coding sonst .. muha .. einfach zu viel wird :D

nur ich kann mit dem prog ned großartig weiter machen bzw. will es ned total durchprogrammieren, wenn ich dann vielleicht alle ausgaben umschreiben muss wegen diesem format befehl.

probier zwar auch schon seit geraumer zeit mit diesem format befehl rum, aber es funktioniert ned so .. wies sollte :D er rundet eben auf ne ganzzahl.

Potassium 08.04.2004 12:40

wie gefällt dir obere möglichkeit?

PunkTey 08.04.2004 12:41

hehe ist echt süß ... aba wenn ich das ganze für 93 beträge mach schau ich alt aus :D

Potassium 08.04.2004 12:42

warum bitte?
mach doch ne for-schleifen oä.
und bei 93 einträgen dauerts ned mal lang :D

Potassium 08.04.2004 12:44

ajo das eine else kannst ausse nehmen

PunkTey 08.04.2004 12:44

na ja .. also mir wäre so eine simple anweisung in der ausgabe lieber :D

sowas wie lblausgabe=~irgendeine formatierende anweisung~ Variable

sowas wär fein :D

aba mit so ner schleife etc. kann ich alles jetzt umprogrammieren und ich hab nimma so viel zeit für dieses projekt dass ich da von neu anfange :)

PunkTey 08.04.2004 12:46

ja und wo soll ich das einbauen?

weil die beträge werden in einem anderen formular eingegeben als sie ausgegeben werden. und die beträge sind alle in variablen drinnen .. und ich habe insgesamt .. 20 formulare wo beträge eingegeben werdn :D

Potassium 08.04.2004 12:47

aso na dann mach einfach ne funktion draus.

PunkTey 08.04.2004 12:57

und wie mach ich die funktion? lol ich bin ein total noob was visual basic angeht. ich mein ich versuchs halt immer so einfach wie möglich zu programmieren, auch wenn es pfuschig is :D aba meinem prof is egal wie ichs programmiere nur funken soll es

nur wie mach ich des mit ner funktion?
hab ja 93 verschiedene variablen :D

Potassium 08.04.2004 12:58

wart ein wenig ich mach dir ein bespiel programm. hab heut an guten tag :D

PunkTey 08.04.2004 13:00

hehe das is lieb .. brauch nämlich echt hilfe dabei. hab das prog zwar schon jmd gegeben dass er mir des mitn format dings macht aba ich glaub das krieg ich nimma rechtzeitig :D

Potassium 08.04.2004 13:19

so ich hoffe das passt so.

PunkTey 08.04.2004 13:24

okay danke. jezz müsst ich dein coding nur noch verstehen und wissen wie ich des bei meinem prog mache :P

PunkTey 08.04.2004 13:26

also ich weiß jezz ned wirklich .. wie du das meinst .. was du geschrieben hast:

'statt txteingabe.text kannst du jede beliebige variable nehmen.
'und die ifabfrage fällt dann natürlich auch weg

in wie fern fällt die ifabfrage weg? ... in der if abfrage hast du ja das textfeld reingeschrieben :D

PunkTey 08.04.2004 13:26

aah verstehe :D

Potassium 08.04.2004 13:27

Zitat:

Original geschrieben von PunkTey
aah verstehe :D
alles paletti jetzt?

PunkTey 08.04.2004 13:30

ein problem habe ich allerdings.

dass is jezz ne funktion für ein ergebnis. und die funktion hat ne variable die ergebnis heißt. aba ich kann ned sagen .. dass er in fünf labels die variable ergebnis ausgeben soll .. weil dann häte ich ja nur eine eingabe und dem is ja ned :D verstehst du? *G*

also ich kann ja ned nur mit einer variable arbeiten ..wenn ich max. 93 variablen habe .. sprich .. 93 formatierte zahlen .. und EINE funktion mit EINER variable .. *g*

Potassium 08.04.2004 13:32

dann schreibs um das er dir die var ausgeben soll die du ihm reingibst ^^.

PunkTey 11.04.2004 16:40

hiho!!

funktioniert funkt ... vorausgesetzt die variablen sind als DOUBLE deklariert .. :)

mfg und danke

Sesa_Mina 11.04.2004 17:24

Da gibt es doch nen speziellen Datentyp CURRENCY den du verwenden kannst. Hat per default nur 2 Nachkommastellen.

Dim EineZahl As Currency

EineZahl = 9.8765432

Debug.Print EineZahl

sollte 9.87 rauskommen.


Alternative:

Private Function Abschneid(Was As Double) As Double
Abschneid = Val(Left$(Trim(Str(Was)), InStr(1, Trim(Str(Was)), ".") + 2))
End Function

Aufruf: Debug.Print Abschneid(9.87654321)
Ausgabe: 9.87

Potassium 11.04.2004 17:28

mh ok das is kürzer :D

Sesa_Mina 11.04.2004 17:30

RegExp kann VB ja leider nicht.. sonst wärs ein noch kürzerer Klammerwald...

PunkTey 12.04.2004 11:12

muhaha ich brauch die variablen die ich auf zwei kommastellen will nur auf currency deklarieren und das wars?
füllt er mir die dann auch auf zwei kommastelen auf, wenn die zweite kommastelle eine 0 ist? =) das wär nämlich auch sehr wichtig .. sonst hats keinen sinn :)

Sesa_Mina 12.04.2004 11:26

wenn du unbedingt 2 Nachkommastellen brauchst machst du nen string aus der zahl und zwar..


Text = Format(Zahl,"0.00")

Das gibt dir dann die Zahl als Text immer mit 2 Nachkommastellen.

Hab nachgeschaut.. Currency limitiert auf 4 Nachkommastellen.

PunkTey 12.04.2004 18:59

okayy .. danke :)

reemrev 13.04.2004 16:28

Den Umweg über den Text braucht man nicht
einfach: Zahl1=format(Zahl,"0.00")
wobei Zahl1 derselbe Datentyp wie Zahl ist

Sesa_Mina 13.04.2004 16:43

@reemev

wenn du 2.3 als 2.30 ausgeben willst musst den umweg über den typ string nehmen. Weil bei Zahl schneidet vb die nullen ja weg bei der ausgabe.

reemrev 13.04.2004 16:58

Stimmt, hast recht. Wenn man die neue Zahl als Variant definiert, müsste es aber funktionieren. Macht aber keinen Unterschied mehr, es sei denn, man möchte mit den neuen Zahlen weiterrechnen(?).

PunkTey 13.04.2004 18:37

ja ich hab in dem prog insgesmt 92 variablen. wenn ich diese format anweisung nehme .. so wie du sie da hingeshrieben hast .. müsste ich ja dann nochmal extra für jede variable ne zweite machen (so hab ichs versatnden)

aba natürlich rechne ich danach mit den zahlen weiter. und da sollten halt alle in nem kaufmännischen format sein. weil es ein scheiß is .. wenn die zahlen dann mal eine haben und dann mal zwei stellen und das sieht dann blöd aus und dann stehen die zehner mal bei den hunderten und umgekehrt und das soll schon untereinander immer die gleiche stelle stehen :D

also auffüllen auf zwei und abschneiden. das es halt immer zwei sind, egal obs 50 euro sind oder 50,678 .. es müssen zwei sein :D und darf ned gerundet werden, weil das ja ne preis verfälschung wäre, wenn ich statt 4,446 (4,44) aufeinmal 4,45 zahl :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag