Ein Bug in der Variablen 'Single'?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Ein Bug in der Variablen 'Single'?

Beitrag von Karolus »

Hallo

Code: Alles auswählen

Dim S, R As Single
Hier deklarierst du nur R explizit als Single, S wird bei der Zuweisung des Werts 8.65 implizit zu Double - damit "reicht" die Genauigkeit als binärer Wert.

Ps. Warum deklarierst du erst explizit nur als Single wenn dir hinterher die Genauigkeit nicht ausreicht.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Ein Bug in der Variablen 'Single'?

Beitrag von theindless »

Hallo,

das Problem kenne ich nicht, aber ein Hinweis von mir:

Code: Alles auswählen

Dim S, R As Single
Damit deklarierst du S NICHT als Single, sondern als Variant.

Oh... Karo war schneller

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Ein Bug in der Variablen 'Single'?

Beitrag von gogo »

Was Du da in der Msgbox siehst ist kein Single-Wert, weil das Ergebnis von S*1 zu einem Double-Wert wird. (Durch die Multiplikation mit der 1 (die wenn sie so dasteht als Integerwert gilt))

Versuch' mal das:

Code: Alles auswählen

Sub Test2
Dim S As Single
S = 8.65
S=S * 1
MsgBox S
End Sub
... und schon steht 8,65 in der Box...


Wenn Du explizit eine Rechnung mit der Single-Genauigkeit brauchst, dann sollten aber alle verwendeten Teile auch als Single deklariert sein - um Fehler zu vermeiden daher ggf. auch die 1! ... und natürlich das Ergebnis ;)
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Ein Bug in der Variablen 'Single'?

Beitrag von theindless »

Hallo,
Das heißt demnach, daß

Code: Alles auswählen

Dim S, R As Single
'ungleich
Dim S As Single
Dim R As Single
ist?
Genau richtig!

Allerdings könntest du statt

Code: Alles auswählen

Dim S As Single
Dim R As Single
auch

Code: Alles auswählen

Dim S as Single, R as Single
schreiben

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Antworten