Maison > Article > développement back-end > Avez-vous appris les deux méthodes d'arrondi en Python ?
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])
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 >>>
Mais il existe des exceptions à la règle 2 ci-dessus, telles que :
>>> round(0.645,2) 0.65 >>>
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 >>>
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'
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}")
0.645 的近似值为 0.65 2.5 的近似值为 3
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.
[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!