Avez-vous appris les deux méthodes d'arrondi en Python ?

PHPz
Libérer: 2023-05-02 13:25:06
avant
3536 Les gens l'ont consulté

1. Utiliser le rond

Dans la plupart des cas, nous utiliserons le rond pour conserver les décimales, mais cela n'est pas conforme aux règles de nos connaissances mathématiques.

round(number[, ndigits])
Copier après la connexion

round() arrondit le nombre (généralement un nombre à virgule flottante) selon les règles suivantes (Python3) :

Parlons du cas où ndigits n'est pas 0 :

Si le dernier chiffre du chiffre réservé est inférieur supérieur ou égal à 4, si si le dernier chiffre du chiffre réservé est égal à 5 ​​et qu'il y a un chiffre après le chiffre, alors le report est effectué, comme round(5.2151,2) = 5.22

Si le dernier chiffre du chiffre réservé est supérieur ou égal à 6, alors le report est effectué. Par exemple, round(5.216,2) = 5.22

>>> round(5.214,2)
5.21
>>> round(5.215,2)
5.21
>>> round(5.2151,2)
5.22
>>> round(5.216,2)
5.22
>>>
Copier après la connexion

Mais il existe des exceptions à la règle 2 ci-dessus, telles que :

>>> round(0.645,2)
0.65
>>>
Copier après la connexion

La raison est que les nombres à virgule flottante ne peuvent représenter que des valeurs approximatives lorsqu'ils sont exprimés en binaire. nous voyons 0,645, en réalité ce que Python stocke est 0,645000000000000017763568394002504646778106689453125 Python stocke les nombres à virgule flottante conformément à la norme IEEE754.

Parlons du cas où ndigits vaut 0 ou Aucun :

Si le dernier chiffre du chiffre réservé est inférieur ou égal à 4, alors jetez-le, comme round(1.4) = 1

Si le dernier chiffre du chiffre réservé est égal à 5, et il n'y a pas de nombre après, alors le nombre pair le plus proche est pris, comme round(1.5)=2, round(2.5)=2

Si le dernier chiffre du chiffre réservé est égal à 5, et il y a un nombre après, alors le chiffre le plus proche est pris, tel que round( 2.51)=3

Si le dernier chiffre du chiffre réservé est supérieur ou égal à 6, alors reportez-vous. Par exemple, round(1.6) = 2

>>> round(1.5)
2
>>> round(1.4)
1
>>> round(1.6)
2
>>> round(2.5)
2
>>> round(2.51)
3
>>>
Copier après la connexion

Veuillez noter que le résultat retenu de la chaîne f est cohérent avec round:

>>> f"{1.5:.0f}"
'2'
>>> f"{2.5:.0f}"
'2'
>>> f"{2.51:.0f}"
'3'
Copier après la connexion

Alors comment obtenir une méthode cohérente avec les règles mathématiques d'arrondi ? Veuillez utiliser la deuxième méthode :

2. Utiliser la décimale

Cette méthode a une condition préalable, c'est-à-dire que la décimale doit d'abord être convertie en chaîne, afin que les nombres à virgule flottante puissent être représentés avec précision.

import decimal

# 修改舍入方式为四舍五入
decimal.getcontext().rounding = "ROUND_HALF_UP"

x = "0.645"
x1 = decimal.Decimal(x).quantize(decimal.Decimal("0.00"))
print(f"{x} 的近似值为 {x1}")
y = "2.5"
y1 = decimal.Decimal(y).quantize(decimal.Decimal("0"))
print(f"{y} 的近似值为 {y1}")
Copier après la connexion

Le résultat du programme ci-dessus est le suivant :

0.645 的近似值为 0.65
2.5 的近似值为 3
Copier après la connexion

Il est entièrement conforme à notre arrondi mathématique.

Mots finaux

Les nombres à virgule flottante ne peuvent représenter que des valeurs approximatives en représentation binaire. Pour ce point, vous pouvez consulter le document [1]. Après avoir compris la représentation des nombres à virgule flottante, cela ne vous semblera pas si étrange lorsque vous examinerez les arrondis.

Références

[1] Documentation : https://docs.python.org/3/tutorial/floatingpoint.html#tut-fp-issues

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!