Comment arrondir un nombre en Python?
Ce problème est en train de me tuer. Comment fait-on roundup un nombre en Python?
J'ai essayé round(nombre) mais il tour le nombre. Exemple:
round(2.3) = 2.0 and not 3, what I would like
La j'ai essayé de type int(nombre + .5) mais il tour le nombre, de nouveau! Exemple:
int(2.3 + .5) = 2
Ensuite, j'ai essayé round(nombre + .5) mais il ne fonctionne pas dans les cas limites. Exemple:
WAIT! THIS WORKED!
Veuillez en informer.
- S. Lott: Steve répondu précisément. Je pense que la question est tout à fait logique - comment faire pour arrondir le nombre (pas vers le bas ou sur le côté). Merci pour les préoccupations tho.
- "Je pense que la question est tout à fait logique" Clairement. Cependant, la question n'a pas de sens pour moi.
round( 2.5 )
arrondit. Chaque fois que je le lance, j'obtiens 3.0. Afin que votre demande de "round(nombre) mais il tour le nombre," est absolument faux. Puisque vous ne pouvez pas mentir, la question doit être incomplètes. Alors veuillez nous fournir un exemple qui montre que vous êtes en train de parler. - S. Lott, round(2.4) - il arrondit vers le bas. Oh, il vient de frapper moi - tu veux dire en général que je dois améliorer la qualité de ma question? Je suis sûr que tout le monde (vous y compris) compris ce que arrondissant les moyens à ma question, tu voulais juste me faire poser de meilleures questions (avec des exemples), droit?
round(number + .5)
ne fonctionne pas si le nombre est entier.round(3+.5) == 4
, quand vous voulez3
.
Vous devez vous connecter pour publier un commentaire.
La ceil (plafond) fonction:
int(math.ceil(363))
math.ceil
renvoie un réel objet integer, pas seulement objet flottant avec une valeur entière.Intéressant Python 2.x, question de garder à l'esprit:
Le problème est que la division de deux entiers en python génère un autre type int et c'est tronquée avant le plafond d'appel. Vous avez à prendre une valeur float (ou en fonte) pour obtenir un résultat correct.
En javascript, exactement le même code produit un résultat différent:
Je sais que cette réponse est pour une question à partir d'un certain temps, mais si vous ne voulez pas importer les maths et vous voulez juste pour finir, cela fonctionne pour moi.
La première partie devient 4 et la deuxième partie correspond à la valeur "Vrai" si il y a un reste, qui, en outre, Vrai = 1; Faux = 0. Donc, si il n'y a pas de reste, alors il reste le même entier, mais si il y a un reste, il ajoute 1.
//
pour l'entier de la division, de sorte que cela devient21 // 5 + (21 % 5 > 0)
.float
s. Nice.Si l'on travaille avec des entiers, une façon de arrondissement est de profiter du fait que
//
arrondit vers le bas: il suffit de faire la division sur le nombre négatif, alors annuler la réponse. Aucune importation, à virgule flottante, ou sous condition nécessaire.Par exemple:
Vous pouvez également numpy:
Je ne dis pas que c'est mieux que les maths, mais si vous utilisiez déjà numpy pour d'autres fins, vous pouvez conserver votre code cohérent.
De toute façon, juste un détail, je suis venu à travers. Je utiliser numpy beaucoup et était surpris, il n'a pas mentionné, mais bien sûr accepté de répondre fonctionne parfaitement bien.
Utiliser
math.ceil
à tour:NOTE: L'entrée doit être flotteur.
Si vous avez besoin d'un entier, appel
int
à convertir:BTW, utilisez
math.floor
à tour bas etround
d'arrondir au plus proche entier.ceil()
va prendre soin d'elle en interneLa syntaxe ne peut être que pythonic qu'on le souhaiterait, mais il est un puissant bibliothèque.
https://docs.python.org/2/library/decimal.html
Je suis étonné que personne n'a suggéré
pour la division entière avec arrondi vers le haut. Utilisé pour être la façon la plus commune pour le C/C++/CUDA (cf.
divup
)Cette fonction nécessite pas de modules.
3
, alors il serait ronde jusqu'à4
qui peut ou peut ne pas être ce que quelqu'un veutÊtre shure arrondi de la valeur doit être flotteur
mais
Essayez ceci:
((int(a) - a) != 0)
expression renvoie1
chaque fois quea
doit être arrondi. Vous pouvez élargir votre réponse et expliquer comment ce travail.Les réponses ci-dessus sont correctes, toutefois, l'importation de la
math
module juste pour cette fonction se sent généralement comme un peu de trop pour moi. Heureusement, il y a une autre façon de faire:True
etFalse
sont interprétés comme1
et0
dans une déclaration sur des nombres en python.g.is_interger()
fondamentalement se traduit parg.has_no_decimal()
oug == int(g)
. Ainsi, la dernière déclaration en anglais litround g down and add one if g has decimal
.int(g) + (g % 1 > 0)
à la place 😉from math import ceil
semble fixer l'importation de l'ensemble du module math 🙂import math
en termes de ce qui se passe en coulisses. Il tombe tous les symboles à l'exceptionceil
.Sans import math //utilisation de la base envionment:
a) méthode /méthode de classe
b) lambda:
Pour ceux qui veulent arrondir
a /b
et obtenir un entier:Autre variante division entière est
Je suis surpris, je n'ai pas vu cette réponse encore
round(x + 0.4999)
, donc je vais la mettre vers le bas. Notez que cela fonctionne avec n'importe quelle version de Python. Les modifications apportées à l'Python arrondissement régime a rendu les choses difficiles. Voir ce post.Sans importer, j'utilise:
Pourquoi cela fonctionne
De la documentation
Donc 2.5 obtient arrondie à 2 et 3,5 obtient arrondi à 4. Si ce n'était pas le cas, alors arrondissement qui pourrait être fait par l'ajout de 0,5, mais nous voulons éviter de tomber à la mi-course. Donc, si vous ajoutez 0.4999 vous arriverez près, mais avec assez de marge pour être arrondie à ce que vous auriez normalement s'attendre. Bien sûr, cela ne fonctionnera pas si l'
x + 0.4999
est égal à[n].5000
, mais c'est peu probable.math.ceil()
?Without importing I use:
. J'ai aussi mentionné qu'il va échouer si lex + 0.4999
est égal à[n].5000
.math
module etmath.ceil()
est dans la bibliothèque standard, donc disponible partout, pour toutes fins pratiques, sans installation de trucs supplémentaires. Et concernant votre mention de quand il échoue, c'est incomplète, dans votre réponse, car il ne parvient pas pour l'ensemble de l'intervalle, et pas seulement pour un seul point. Techniquement, vous pourriez vous dire que vous êtes correct, comme vous le dites si et pas forum, mais il fera de l'impression sur le lecteur occasionnel qu'il est moins probable que l'on est vraiment.À le faire sans aucune importation:
Je sais que c'est à partir d'un certain temps en arrière, mais j'ai trouvé une très intéressante réponse, voilà:
Cela corrige les bords de cas et de travaux pour les deux nombres positifs et négatifs, et ne nécessite pas de n'importe quelle fonction d'importation
Acclamations
-round(-x-0.3) = x
lorsque vous utilisez 4500/1000 en python, le résultat sera 4, parce que, pour défaut de python asume que le nombre entier de la raison, de la logique:
4500/1000 = 4.5 --> int(4.5) = 4
et ceil de 4 obviouslly est de 4
à l'aide de 4500/1000.0 le résultat va être de 4,5 et plafond de 4,5 --> 5
À l'aide de javascript, vous recevrez 4.5 comme résultat de 4500/1000, parce que javascript asume seulement le résultat sous la forme "type numérique" et retourner un résultat directement en tant que float
Bonne Chance!!
/
toujours des résultats dans un flotteur, de sorte4500/1000
est toujours 4.5.Si vous ne voulez pas importer quoi que ce soit, vous pouvez toujours écrire votre propre fonction simple comme:
def RoundUP(num):
if num== int(num):
return num
return int(num + 1)
Vous pouvez utiliser étage devision et ajouter 1 à elle.
2.3 //2 + 1
ceil()
bizarrement au lieu de faire le contraire et ensuite de compensationfrom math import ceil; assert 4 // 2 + 1 == ceil(4 / 2)
Je pense que vous confondez les mécanismes de travail entre
int()
etround()
.int()
toujours tronque les nombres décimaux si un nombre flottant est donné; considérant queround()
, en cas de2.5
où2
et3
sont à égale distance de2.5
, Python renvoie selon ce qui est le plus loin du point 0.2.3
est transformé en3
, qui se trouve dans aucun de vos exemples.Ma part
J'ai testé
print(-(-101 //5)) = 21
exemple donné ci-dessus.Maintenant pour arrondissement:
Je ne peux pas utiliser
**
donc j'étale la multiplication de division:Je suis fondamentalement un débutant en Python, mais si vous êtes juste essayer de tour vers le haut au lieu de vers le bas pourquoi ne pas le faire:
round(integer + 0.5)
C'est ce que je fais souvent