[Python] Une histoire qui semblait tomber dans un piège à contourner

introduction

C'était une histoire que j'allais tomber dans un piège lorsque j'implémentais un calcul d'essai en utilisant Python dans mon entreprise.

Je voulais juste arrondir ...

"Oh, je vais vous dire ce qui s'est passé maintenant!"

** "Je pensais arrondir" 2,5 "à" 3 ", mais avant de le savoir, c'était" 2 "" **

"Eh bien, je ne sais pas de quoi vous parlez, mais je ne savais pas ce que vous faisiez ..."

"Comme ma tête était jolie ... Si c'est une erreur de calcul ou un malentendu, c'est tellement chaotique. J'ai goûté quelque chose de plus effrayant ... "

C'est le sujet principal de la farce

Comme je l'ai dit plus tôt, je voulais arrondir en Python.

La première chose qui me vient à l'esprit ** fonction ronde ** ** fonction de format **

"Eh bien, si vous l'utilisez ici et là, vous pouvez vous le permettre."

La pensée fut soudainement brisée ...

>>> k=2.5
>>> round(k)
2

"e"

À cette époque, mon cerveau était rempli de méfiance à l'égard de l'arrondi que j'aurais dû apprendre dans l'enseignement obligatoire à cette époque.

** "Quand avez-vous eu l'illusion que 2,5 serait 3 en arrondissant?" **

Non Non Non Non

Si vous arrondissez «2,5», c'est «3».

Mais pourquoi?

Essayons-le avec la fonction format

>>> format(k, '.0f')
'2'

Comment. Êtes-vous gourou?

Mais pourquoi?

J'ai enquêté

Quand je regarde Cette personne enquêtait et a également suggéré une ** solution **.  ↓  ↓  ↓ Remarque parce que j'étais accro à l'arrondissement de python3

Dans cet article, il a été constaté que la cause était ** arrondi au nombre pair le plus proche **.

Arrondir au plus proche pair [modifier | Arrondir au pair le plus proche (RN) est arrondi vers le bas si la fraction est inférieure à 0,5, arrondi vers le haut si la fraction est supérieure à 0,5, arrondi vers le bas ou arrondi vers le haut si la fraction est exactement 0,5, selon les résultats pairs. Rouler à. Elle est définie comme la règle A dans JIS Z 8401 et est considérée comme «souhaitable» d'après la règle B (arrondi). L'arrondi entraîne un biais. Même s'il existe une proportion finie de données avec une fraction de 0,5, il n'y a pas de biais, et même si un grand nombre est ajouté, l'erreur d'arrondi ne s'accumule pas en biais vers un côté spécifique (pair +). Si les données ont des caractéristiques telles que 0,5 apparaît mais impair +0,5 n'apparaît pas, un biais apparaîtra toujours). Voir aussi: Wikipedia-Fraction

Il semble que 0,5 peut être arrondi à Python2 Python 3 est comme ça.

En d'autres termes Si vous le réglez sur "2,5", ce sera "2" du côté pair.

Donc, si vous le faites avec "3.5", ce sera "4".

>>> k=3.5
>>> round(k)
4

Où est la demande pour cette spécification ...

Solution

@Shiracamus a suggéré une solution à l'article que j'ai présenté plus tôt.

def round(x):
    return (x*2+1)//2
def round(x,d=0): #Faites cela lorsque vous spécifiez le nombre de chiffres
    p=10**d
    return (x*p*2+1)//2/p

Cela l'a résolu. @ sak_2 @shiracamus Merci beaucoup.

Soyez prudent aussi.

Recommended Posts

[Python] Une histoire qui semblait tomber dans un piège à contourner
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Python qui fusionne beaucoup d'excellence en un seul Excel
[Python] Comment écrire une docstring conforme à PEP8
Une histoire à laquelle j'étais accro chez np.where
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
Programme Python qui convertit les données ical en texte
Une histoire bloquée lors de la tentative de mise à niveau de la version Python avec GCE
Une route vers Python intermédiaire
Une fonction qui divise l'itérable en N morceaux en Python
Un script Python qui enregistre une image de presse-papiers (GTK) dans un fichier.
Une histoire sur la façon de spécifier un chemin relatif en python.
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Une histoire sur la tentative d'implémentation de variables privées en Python.
Un script python qui convertit les données Oracle Database en csv
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
Comment transformer un mauvais code avec la refactorisation Python en code ordinaire qui n'est pas une belle conception orientée objet
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
Une histoire que Qiita voulait vraiment voir dans un environnement proxy
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Une histoire qui avait du mal à traiter en boucle 3 millions de données d'identification
Une histoire sur la tentative d'exécuter plusieurs versions de Python (édition Mac)
Un codec Python spécial qui semble savoir mais ne sait pas
Un script qui renvoie 0, 1 attaché au premier Python prime
Un guide rapide de PyFlink qui combine Apache Flink et Python
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
L'histoire de la création d'un module qui ignore le courrier avec python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
5 façons de créer un chatbot Python
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Notez que l'environnement Python de Pineapple peut être modifié avec pyenv
Un programme python qui redimensionne une vidéo et la transforme en image
Comment utiliser hmmlearn, une bibliothèque Python qui réalise des modèles de Markov cachés
Une histoire qui a souffert d'une différence de système d'exploitation lors de la tentative d'implémentation d'un article
[Python] Un programme qui crée des escaliers avec #
[Python] Utilisez des pandas pour extraire △△ qui maximise ○○
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Super Introduction Arithmétique Bit Python
Une histoire qui a trébuché sur un calcul de comparaison
Exemple de script pour piéger les signaux en Python
Je veux créer un environnement Python
[Python] Comment inverser une chaîne de caractères
Comment obtenir stacktrace en python
10 erreurs Python communes aux débutants
[Python] Créez un LineBot qui s'exécute régulièrement
Une histoire sur Python pop and append
Un monde typé qui commence par Python
L'histoire du traitement A du blackjack (python)