Erstellung der Beschriftungsbilder mittels Python


Hallo zusammen,

ich versuche gerade ein Beschriftungsbild mit Python zu erstellen.
Die Definition erfolgt folgend: p:stuetze(@220@)

Mit der folgenden Funktion prüfe ich den Ausgangstyp des nötigen Attributes:

def stuetze (attr_220):
    x = attr_220
    string = str(x) + "; " + str(type(x))
    return string

Als Ergebnis bekomme ich funktionierendes BEBILD an meiner Stütze: "0.44; <class 'float'>".
--> Also, meine Breite der Stütze ist eine Fließkommazahl, was auch logisch ist.

Jetzt fange ich mit meiner Funktion an:

def stuetze (attr_220):
    x = round(attr_220, 3)
    return str(x)

und bekomme den Fehler: "type str doesnt define _round_ method", somit ist mein Wert scheinbar kein float, sondern str.

Weiter probiere ich float aus str rauszubekommen:

def stuetze (attr_220):
    x = str(attr_220)
    y = float(x)
    return y

und bekomme den Fehler: "could not convert string to float"

Hatte schon mal jemand mit so einem Problem zu tun gehabt? Gibt's ggf. bestimmte Allplan-Einschränkungen auf Python-Syntax?

Ich bedanke mich im Voraus für die Hinweise!

-------------------------------------
Ergänzung
-------------------------------------

Ich habe noch getestet die Funktionen float und round ohne den Wert des Attributes zu nutzen --> beide funktionieren.

def stuetze (attr_220):
    x = round(float("3.123456789"), 3)
    return x

Grüße
Taras

Hallo.
Möchtest du jetzt einen String oder eine Float?
Wenn String, dann vielleicht
x = str(round(attr_220, 3))
oder vielleicht F-String benutzen.

Fließkommazahlen Runden

Gruß Felix
Allplan 2024-0-1

Cité par f_hoeser
Hallo.

Möchtest du jetzt einen String oder eine Float?

Wenn String, dann vielleicht

x = str(round(attr_220, 3))

oder vielleicht F-String benutzen.
Fließkommazahlen Runden

Hallo Felix,
vielen Dank Dir für die schnelle Antwort.

Ich habe auch mit F-String probiert. Ich denke es liegt hier gar nicht am Python-Syntax, sondern an Allplan-Besonderheiten, da ich die ganzen Sachen im Terminal einwandfrei zum Laufen bekomme.. Wenn ich den Wert als float betrachte und float-Funktionen anwende, sagt es mir dass ich sie nicht auf str anwenden darf und umgekehrt.

Anbei die Ergebnisse:

# Annahme, dass der Typ float ist
def stuetze (float):
    string = f"{float:.3f}"
    string = "{:.3f}".format(float) # 2e Syntax-Variante
    return string

Fehler: Unknown format code "f" for object of type "str"

Hintergund: ich will die intelligente Aufrundung und Hochstellung nach DIN 1356-1 im BEBILD einsetzen. Und da benötige ich die Funktionen für float, sowie "<" oder ">" um zu prüfen, ob die Zahl größer als 100cm ist --> dann Angabe in [m]oder kleiner als 100cm --> dann Angabe in [cm].


https://campus.allplan.com/ utilise des cookies  -  Plus d'informations

Accepter