Runden
Moderator: Moderatoren
Runden
Hi,
ich möchte mit Starbasic runden:
auf eine Nachkommastelle:
100,123 ==> 100,1
100,511 ==> 100,2
auf Hunderter:
1111 ==> 1100
1151 ==> 1200
auf Tausender:
1111 ==> 1000
1511 ==> 2000
In VBA gibt es die Möglichkeit 'Application.WorksheetFunction.Round'. Gibt es in Starbasic ähnliches, oder hat jemand ein Workaround?
Gruss
Thomas
ich möchte mit Starbasic runden:
auf eine Nachkommastelle:
100,123 ==> 100,1
100,511 ==> 100,2
auf Hunderter:
1111 ==> 1100
1151 ==> 1200
auf Tausender:
1111 ==> 1000
1511 ==> 2000
In VBA gibt es die Möglichkeit 'Application.WorksheetFunction.Round'. Gibt es in Starbasic ähnliches, oder hat jemand ein Workaround?
Gruss
Thomas
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Hallo Thomas,
weshalb bemühst dazu nicht die Online-Hilfe. Zitat aus Online-Hilfe:
RUNDEN
Gibt eine auf eine festgelegte Anzahl von Nachkommastellen gerundete Zahl zurück.
Syntax:
RUNDEN(Zahl; Anzahl)
Zahl ist die Zahl, die gerundet werden soll.
Anzahl (optional) ist die Anzahl der Stellen, auf die gerundet werden soll. Ist der Parameter Anzahl negativ, so wird auf Vorkommastellen gerundet.
Beispiel:
Wenn Sie 17,546 in das Feld Zahl eingeben und 1 als Anzahl der Stellen festlegen, auf die gerundet werden soll, erhalten Sie das Ergebnis 17,5.
weshalb bemühst dazu nicht die Online-Hilfe. Zitat aus Online-Hilfe:
RUNDEN
Gibt eine auf eine festgelegte Anzahl von Nachkommastellen gerundete Zahl zurück.
Syntax:
RUNDEN(Zahl; Anzahl)
Zahl ist die Zahl, die gerundet werden soll.
Anzahl (optional) ist die Anzahl der Stellen, auf die gerundet werden soll. Ist der Parameter Anzahl negativ, so wird auf Vorkommastellen gerundet.
Beispiel:
Wenn Sie 17,546 in das Feld Zahl eingeben und 1 als Anzahl der Stellen festlegen, auf die gerundet werden soll, erhalten Sie das Ergebnis 17,5.
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Hallo Thomas,
soweit ich weiß kannst Du auf die Calc-Funktionen nicht direkt in StarBasic zugreifen. Folgende Funktion macht das gleiche wie der Calc-Befehl runden:
Steffan.
soweit ich weiß kannst Du auf die Calc-Funktionen nicht direkt in StarBasic zugreifen. Folgende Funktion macht das gleiche wie der Calc-Befehl runden:
Code: Alles auswählen
sub testRunden
dblWert=1234.56789
msgbox runden(dblWert)
msgbox runden(dblWert,3)
msgbox runden(dblWert,-2)
dblWert=9876.54321
msgbox runden(dblWert)
msgbox runden(dblWert,3)
msgbox runden(dblWert,-2)
End sub
Function runden(dblZahl as double, optional iStellen as integer) as double
' Funktion rundet eine Zahl (dblZahl) auf die angegebene Anzahl von Stellen (iStellen)
' Angabe der Stellenanzahl optional (Standard=0)
dim dblTmp as double, dblDif as double
if isMissing(iStellen) then iStellen = 0
dblTmp = (int(dblZahl * 10 ^ iStellen))/(10 ^ iStellen)
dblDif = 10 ^ ((-1) * iStellen)
if dblZahl-dblTmp>dblDif/2 then
dbltmp=dbltmp + dblDif
endif
runden=dblTmp
end Function
-
- Beiträge: 9
- Registriert: Mo, 26.03.2007 07:21
Re: Runden
Hallo Steffan,
deine Funktion find ich Klasse aber ich habe ein Problem mit der 5 als letzte Stelle.
Ich habe die Funktion mal mit (4.45, 1) aufgerufen. Dann rundet OO Basic bei mir auf 4.4, weil OO Basic aus dblZahl-dblTmp (4.45 - 4.4) 4,99999999999998E-02 macht.
Kann man das irgendwie beeinflussen?
Grüße Christian
deine Funktion find ich Klasse aber ich habe ein Problem mit der 5 als letzte Stelle.
Ich habe die Funktion mal mit (4.45, 1) aufgerufen. Dann rundet OO Basic bei mir auf 4.4, weil OO Basic aus dblZahl-dblTmp (4.45 - 4.4) 4,99999999999998E-02 macht.
Kann man das irgendwie beeinflussen?
Grüße Christian
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Runden
Lieber Christian,
deine Frage ist zwar schon ein Weilchen her, aber vielleicht interessiert sich ja jemand für meine Lösung.
Ich habe festgestellt, dass der Befehl "format" richtig rundet. Hier wird die zahl2 auf zahl1 Stellen gekürzt:
Grüße
Pit
deine Frage ist zwar schon ein Weilchen her, aber vielleicht interessiert sich ja jemand für meine Lösung.
Ich habe festgestellt, dass der Befehl "format" richtig rundet. Hier wird die zahl2 auf zahl1 Stellen gekürzt:
Code: Alles auswählen
dim komma, rundungsstelle, naechstestelle as integer
dim kommaformat as string
dim zahlformat(1) as string
select case zahl1
case > 0
komma= InStr(zahl2,",")
rundungsstelle=mid(zahl2,komma+zahl1,1)
naechstestelle=mid(zahl2,komma+zahl1+1,1)
zahlformat(1) = (String(zahl1,"0"))
zahlformat(0) = "0"
kommaformat =join(zahlformat(),".")
Loesung =format(Cstr(zahl2),kommaformat)
case < 0
zahl1=zahl1*(-1)
Loesung =Clng(zahl2/10^zahl1)*10^zahl1
case else
Loesung =format(CStr(zahl2),"0")
end select
Pit
-
- Beiträge: 9
- Registriert: Mo, 26.03.2007 07:21
Re: Runden
Hallo,
ich habe nun festgestellt, dass auch die Funktionen Int(), CInt() und CLng() richten runden und habe die Funktion wie folgt geändert:
Grüße
Christian
ich habe nun festgestellt, dass auch die Funktionen Int(), CInt() und CLng() richten runden und habe die Funktion wie folgt geändert:
Code: Alles auswählen
Function runden(dblZahl as double, optional iStellen as integer) as double
' Funktion rundet eine Zahl (dblZahl) auf die angegebene Anzahl von Stellen (iStellen)
' Angabe der Stellenanzahl optional (Standard=0)
dim dblTmp as double, lngTmp as Long
if isMissing(iStellen) then iStellen = 0
dblTmp = dblZahl * 10^iStellen
lngTmp = CLng(dblTmp)
dblTmp = CDbl(lngTmp) / 10^iStellen
runden = dblTmp
end Function
Christian