Ein Bug in der Variablen 'Single'?

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

Moderator: Moderatoren

Karolus
********
Beiträge: 7535
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
LO25.2… debian 13( trixie ) auf Raspberry5 8GB (ARM64)
LO25.8… flatpak debian 13( trixie ) 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