Function "round"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bikehiro_57
User
Beiträge: 2
Registriert: Samstag 23. November 2024, 14:51

#import math # Variante 2 Module "math" importieren
# a^2 + b^2 = c^2

a = float(input("Länge der Ankathete (cm): "))
b = float(input("Länge der Gegenkathete (cm): "))

c = (a**2 + b**2)**0.5 # Variante 1!!
#c = math.sqrt(a**2 + b**2)

print(f"Die Hypotenuse ist {c} cm lang. ")

Hallo,
wie bringe ich das Script dazu, mir das Ergebnis auf zwei Stellen zu runden und in cm auszugeben??
LG
Sorry, bin blutiger Anfänger!!!
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Ich bin mir sicher, auch als Anfänger bist du in der Lage genau nach dem Funktionsnamen hier im Forum zu suchen. Da wirst du einige Diskussionen finden.
Inklusive der Formatierung von Fließkommazahlen in f-Strings.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man die genannte Funktion hier nicht braucht. Die ist eher dazu da wenn man tatsächlich mit gerundeten Zahlen weiter rechnen möchte. Für das Einsetzen in eine Zeichenkette würde man eher bei der Format-Mini-”Sprache” ansetzen, also das "{c}" um die entsprechenden Formatierungsangaben ergänzen. Die Referenzdokumentation findet man hier: https://docs.python.org/3.10/library/st ... i-language

Edit: Wenn man weiss wie man eine Gleitkommazahl in eine ganze Zahl umwandeln kann, lässt mit einer zusätzlichen Grundrechenart, und zweien die schon im Programm vorkommen, mit ein bisschen nachdenken auch eine gerundete Zahl berechnen. Die im Gegensatz zur `round()`-Funktion dann auch eher der Rundung entspricht, welche viele Leute anscheinend erwarten, wenn sie noch nie damit konfrontiert waren, dass es mehrere Arten zu runden gibt, und es per se nicht *die* richtige Art zu runden gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
DeaD_EyE
User
Beiträge: 1239
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das wissenschaftliche Runden verursacht eine geringere Abweichung, wenn z.B. gerundete Werte aufsummiert werden. Beim kaufmännischen Runden entstehen größere Differenzen, wenn man die Einzelwerte summiert.

Code: Alles auswählen

def value_gen(start, stop):
    for i in range(start * 10, stop * 10, 10):
        yield (i + 5) / 10


def roundk(value):
    """
    Kaufmännisches Runden
    """
    int_value = int(value)

    if abs(value - int_value) >= 0.5:
        int_value += 1
    
    return int_value


values = tuple(value_gen(0, 11))

for value in values:
    print(f"Wert: {value:<7} round: {round(value):<7} roundk: {roundk(value)}")

print()
print(f"Summe: {sum(values)}")
print(f"Summe (round): {sum(round(v) for v in values)}")
print(f"Summe (roundk): {sum(roundk(v) for v in values)}")

Wert: 0.5 round: 0 roundk: 1
Wert: 1.5 round: 2 roundk: 2
Wert: 2.5 round: 2 roundk: 3
Wert: 3.5 round: 4 roundk: 4
Wert: 4.5 round: 4 roundk: 5
Wert: 5.5 round: 6 roundk: 6
Wert: 6.5 round: 6 roundk: 7
Wert: 7.5 round: 8 roundk: 8
Wert: 8.5 round: 8 roundk: 9
Wert: 9.5 round: 10 roundk: 10
Wert: 10.5 round: 10 roundk: 11

Summe: 60.5
Summe (round): 60
Summe (roundk): 66
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
bikehiro_57
User
Beiträge: 2
Registriert: Samstag 23. November 2024, 14:51

bikehiro_57 hat geschrieben: Samstag 23. November 2024, 15:24 #import math # Variante 2 Module "math" importieren
# a^2 + b^2 = c^2

a = float(input("Länge der Ankathete (cm): "))
b = float(input("Länge der Gegenkathete (cm): "))

c = (a**2 + b**2)**0.5 # Variante 1!!
#c = math.sqrt(a**2 + b**2)

print(f"Die Hypotenuse ist {c} cm lang. ")

Hallo,
wie bringe ich das Script dazu, mir das Ergebnis auf zwei Stellen zu runden und in cm auszugeben??
LG
Sorry, bin blutiger Anfänger!!!
#print(f"Die Hypotenuse ist {c:.2f} cm lang.") Danke, so schaut das Ergebnis aus!!!!!
Danke Microsoft EDGE Copilot!!!!!
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@DeaD_EyE: Wäre kaufmännisches Runden zur nächsten Ganzzahl nicht einfach das hier?

Code: Alles auswählen

int_value = int(value + 0.5)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Ich würde das so machen (oder dazu schreiben, dass das nur für positive Zahlen verwendet werden sollte):

Code: Alles auswählen

int_value = int(value + 0.5 * math.copysign(1, value))
Durch das Quadrieren spielt das bei der gegebenen Aufgabe natürlich keine Rolle.

Hach ja, da werde ich wieder nostalgisch…

Code: Alles auswählen

10 PRINT"LAENGEN IN CM:"
20 INPUT"ANKATHETE";A
30 INPUT"GEGENKATHETE";B
40 C=SQR(A*A+B*B)
50 PRINT"HYPOTENUSE =";INT(C*100+.5)/100;"CM"
@bikehiro_57: Später könntest Du das Programm noch durch Fehlerbehandlung erweitern, damit die Benutzer keinen Unsinn eingeben können, wie Eingaben die keine Zahlen sind, oder negative Längenangaben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten