rundungsfehler beim berechnen von spaltenbreiten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: rundungsfehler beim berechnen von spaltenbreiten

von kannenklaus » Do, 02.02.2006 15:49

hallo thomas,
Als Variablen-Typ wählst du nur integer (bis max. +/- 32.768) oder Long (bis +/- 2.147.483.648) weder Single noch double.
danke für den tipp. werde nun mit dem 1/100 rechnen. die versprechen ja eine genauigkeit, die dann so wohl nicht umgesetzt wird.

beste grüße

klaus

von Toxitom » Do, 02.02.2006 14:27

Hey Klaus,

(brauchst du das wirklich so genau? OOo Calc ist doch kein CAD-System :wink: )

Tia, das ist generell die Problematik bei Rechnen mit Kommastellen. Um exakt zu rechnen, musst du in einem Computer immer ganze Zahlen nehmen - dann hast du innerhalb einer gewissen Begrenzung exakte Zahlen. Keine Divisionen, keine Kommastellen. Sonst wird es immer ungenau - eben Rundungsfehler.
Auf dein Problem zugeschnitten: Multipliziere die eingegeben Spaltenbreiten nach dem Auslesen mit 100, schneide die Nachkommatellen ab, oder nutze besser gleich die Einheit 100stel Millimeter - die nutzt OOo intern auch. Jetzt mache alle deine Berechnungen mit diesen Zahlen - dann sollte das schon passen.
Als Variablen-Typ wählst du nur integer (bis max. +/- 32.768) oder Long (bis +/- 2.147.483.648) weder Single noch double.
Etwas wirst du dennoch nicht ganz hinbekommen: Die Anzeige-Darstellung rechnet intern in TWIPS, und da gibt es dann leider dennoch Umrechnungsungenauigkeiten.

Viele Grüße
Thomas

rundungsfehler beim berechnen von spaltenbreiten

von kannenklaus » Do, 02.02.2006 08:40

hallo

in einem makro werden werte von spaltenbreiten in cm z.b. 1,10 aus einem dialog ausgelesen und festgelegt. anschließend läuft ein makro und bildet die summe über die spalten. dabei kommt es zu rundungsfehler in der 2. nachkommastelle ab der 5.spalte.

Code: Alles auswählen

'--Makro, das Gesamtbreite der Spalten A bis K ermittelt
Sub GesamtBreiteErmitteln
	Dim iGesamtbreite as double
	calcDoc = ThisComponent
	oAktivesBlatt = calcDoc.CurrentController.activeSheet
	
'--F/N-Schleife für die Spalten A bis K
	For I = 0 to 10
	'ermittelt die Gesamthöhe der jeweiligen Zeilen und zeigt diese im Dialog an
	   iGesamtbreite = iGesamtbreite + oAktivesBlatt.Columns(I).width/1000 
	   oDlg.getControl("numGesamtbreite").value = iGesamtbreite
	next

End Sub
zeigt man die werte in einer msgbox an, werden 4 nachkommastellen gezeigt, die nicht genau den eingegeben werten entsprechen. dies trifft auch bei standardbreiten von starcalc zu.

Code: Alles auswählen

Sub testSpBreite
Dim oDlg as Object
Dim calcDoc as Object
Dim oAktivesBlatt as Object
Dim i as integer
Dim h as double
	calcDoc = ThisComponent
	oAktivesBlatt = calcDoc.CurrentController.activeSheet
	
	for i = 0 to 10
	h = h+oAktivesBlatt.Columns(i).width/1000
	msgbox("Zeile: "+i+Chr(13)+"Höhe: "+h,1, "Test")
	
	next
End Sub
meine frage ist nun:
kann ich die variablendeklaration mit double/single so beeinflussen, dass diese nur 2. nachkommastellen erfasst oder kann ich das problem bei den nummernfeldern des dialogs lösen.

freue mich auf eine antwort

grüße klaus

Nach oben