1
votes

Besoin d'aide pour comprendre la commande de format ".2f" et pourquoi elle ne fonctionne pas dans mon code

Je m'entraîne sur mes déclarations de format, mais je ne comprends pas très bien comment cela fonctionne. J'essaye spécifiquement de comprendre la commande de format en utilisant la commande ".2f" c'est le code que j'ai actuellement, la deuxième ligne s'exécute avant qu'elle ne retourne et l'erreur:

//Sample run:
Enter the sales amount: 1234
The sales amount is $ 1,234.00
The sales tax is $ 98.72
The total sale is $ 1,332.72
Run complete. Press the Enter key to exit

J'essaye de faire un script, qui affiche la sortie de l'exemple d'exécution suivant:

salesTax = 0.08

salesAmount = str(input('Enter the sales amount: '))

print ('The sales amount is', format('$'+salesAmount, 
'.2f'))

print ('The sales tax is', format("$"+'.2f'))

print('The total sale is', format("$"+totalSales*salesTax, 
'.2f'))

input("\nRun complete. Press the Enter key to exit.")


3 commentaires

La syntaxe est "formatString" .format (valeur1, valeur2, valeur3, ...)


programiz.com/python-programming/methods/string/format


Hmm, il y a aussi une fonction format : format (value, format_string) , mais elle n'est pas couramment utilisée.


4 Réponses :


2
votes

.2f doit être en dehors de la méthode de format. par exemple, essayez print("{:.2f}".format(12.345678))


1 commentaires

Ce n'est pas correct. Il n'utilise pas la méthode format mais la fonction format qui attend 2 arguments et est destinée à un seul élément



2
votes

TL;DR

'The sales amount is $' + the_formatted_number

Décomposition:

Convertit le nombre en chaîne au format 2 décimales (partie .2 ) avec représentation en virgule flottante (partie f ).

format(salesAmount, '.2f')

Maintenant que vous avez une chaîne, vous la joignez soit avec pass to print, soit vous pouvez rejoindre au code précédent avec + ou autre.

print('The sales amount is $', format(salesAmount, '.2f'))


1 commentaires

Merci beaucoup, cela a été très utile, je sais que c'est un concept facile, mais je ne pouvais tout simplement pas me taper la tête pour une raison quelconque.



1
votes

format est un format -in fonction qui prend deux arguments: valeur et format_spec .

format ('$' + salesAmount, '.2f')

Vous donnera une erreur car il attend un nombre ou une représentation sous forme de chaîne d'un nombre comme valeur pour appliquer le format que vous avez fourni. Vous obtiendrez une erreur:

ValueError: Code de format inconnu 'f' pour l'objet de type 'str'

format (salesAmount, '.2f')

Cela fonctionnera correctement.

Remarque: strong > Si vous utilisez Python 3.6+, vous pouvez également utiliser une f-string:

f"{12.345678:.2f}"


2 commentaires

Bien que cela fonctionne, vous n’expliquez pas le fonctionnement de la fonction format, ce qui a été demandé


@lmiguelvargasf merci pour votre clarification, je garderai cela à l'esprit lors de l'utilisation de la commande format.



1
votes

La syntaxe est

print("The sales amount is ${.2f}".format(salesAmount))

Lorsque vous utilisez un format .2f , la valeur doit être un float , pas une chaîne, vous devez donc convertir l'entrée en float ( input () renvoie une chaîne, il n'est pas nécessaire d'utiliser str () sur le résultat. Et vous ne pouvez pas concaténer $ à la valeur avant de la formater, vous devez concaténer cela au résultat.

Vous avez également utilisé une variable totalSales code inexistante > dans vos appels print () , il devrait s'agir de salesAmount.

salesTax = 0.08
salesAmount = float(input('Enter the sales amount: '))
print ('The sales amount is', '$' + format(salesAmount, '.2f'))
print ('The sales tax is', '$' + format(salesTax*salesAmount, '.2f'))
print('The total sale is', '$' + format(salesAmount + salesAmount*salesTax, '.2f'))
input("\nRun complete. Press the Enter key to exit.")

Cela dit, cette utilisation du format () n'est pas courante de nos jours. Il est plus facile d'utiliser une f-string ou str.format () , qui vous permet d'incorporer la spécification de format dans une chaîne avec le texte brut, et formatez plusieurs valeurs ensemble, par exemple

format(value, format_spec)


1 commentaires

Wow merci pour la réponse étonnante et détaillée, je garderai cela à l'esprit et j'écrirai probablement un nouveau script pour m'entraîner avec le str.format () maintenant aussi.