En utilisant Python v2, j'ai une valeur qui traverse mon programme Qui donne un nombre arrondi à 2 décimales à la fin:
comme ça:
print ("Total cost is: ${:0.2f}".format(TotalAmount))
Est-il possible d'insérer une virgule tous les 3 chiffres à gauche du séparateur décimal?
Par exemple: 10000,00 devient 10 000,00 ou 1000000,00 devient 1 000 000,00
Merci pour toute aide.
En Python 2.7 ou supérieur, vous pouvez utiliser
print ("Total cost is: ${:,.2f}".format(TotalAmount))
Ceci est documenté dans PEP 378 .
(À partir de votre code, je ne peux pas dire quelle version de Python vous utilisez.)
Vous pouvez utiliser locale.currency
si TotalAmount
représente de l'argent. Cela fonctionne aussi sur Python <2.7:
>>> locale.setlocale(locale.LC_ALL, '')
'en_US.utf8'
>>> locale.currency(123456.789, symbol=False, grouping=True)
'123,456.79'
Remarque: cela ne fonctionne pas avec les paramètres régionaux C
. Vous devez donc définir d'autres paramètres régionaux avant de les appeler.
si vous utilisez Python 3 ou une version ultérieure, voici une méthode plus simple pour insérer une virgule:
value = -12345672
print (format (value, ',d'))
value = -12345672
print ('{:,}'.format(value))
'{:20,.2f}'.format(TotalAmount)
Une fonction qui fonctionne en python2.7 + ou python3.1 +
def comma(num):
'''Add comma to every 3rd digit. Takes int or float and
returns string.'''
if type(num) == int:
return '{:,}'.format(num)
Elif type(num) == float:
return '{:,.2f}'.format(num) # Rounds to 2 decimal places
else:
print("Need int or float as input to function comma()!")
Ce n'est pas particulièrement élégant mais devrait fonctionner aussi:
a = "1000000.00"
e = list(a.split(".")[0])
for i in range(len(e))[::-3][1:]:
e.insert(i+1,",")
result = "".join(e)+"."+a.split(".")[1]
J'ai commencé à apprendre Python il y a environ 5 heures, mais je pense avoir développé quelque chose pour les nombres entiers (désolé, je ne pouvais pas comprendre les flottants). Je suis au lycée, donc le code pourrait être beaucoup plus efficace; Je viens de faire quelque chose de neuf qui a du sens pour moi. Si quelqu'un a des idées sur la façon de s'améliorer avec de nombreuses explications sur son fonctionnement, faites-le moi savoir!
# Inserts comma separators
def place_value(num):
perm_num = num # Stores "num" to ensure it cannot be modified
lis_num = list(str(num)) # Makes "num" into a list of single-character strings since lists are easier to manipulate
if len(str(perm_num)) > 3:
index_offset = 0 # Every time a comma is added, the numbers are all shifted over one
for index in range(len(str(perm_num))): # Converts "perm_num" to string so len() can count the length, then uses that for a range
mod_index = (index + 1) % 3 # Locates every 3 index
neg_index = -1 * (index + 1 + index_offset) # Calculates the index that the comma will be inserted at
if mod_index == 0: # If "index" is evenly divisible by 3
lis_num.insert(neg_index, ",") # Adds comma place of negative index
index_offset += 1 # Every time a comma is added, the index of all items in list are increased by 1 from the back
str_num = "".join(lis_num) # Joins list back together into string
else: # If the number is less than or equal to 3 digits long, don't separate with commas
str_num = str(num)
return str_num
Les réponses ci-dessus sont tellement plus agréables que le code que j'utilisais dans mon projet (pas de travail à la maison):
def commaize(number):
text = str(number)
parts = text.split(".")
ret = ""
if len(parts) > 1:
ret = "."
ret += parts[1] # Apparently commas aren't used to the right of the decimal point
# The -1 offsets to len() and 0 are because len() is 1 based but text[] is 0 based
for i in range(len(parts[0]) - 1,-1,-1):
# We can't just check (i % 3) because we're counting from right to left
# and i is counting from left to right. We can overcome this by checking
# len() - i, although it needs to be adjusted for the off-by-one with a -1
# We also make sure we aren't at the far-right (len() - 1) so we don't end
# with a comma
if (len(parts[0]) - i - 1) % 3 == 0 and i != len(parts[0]) - 1:
ret = "," + ret
ret = parts[0][i] + ret
return ret