Y a-t-il de toute façon que je puisse gagner des chiffres dans un tuple à deux points décimaux,
à partir de ceci: à ceci: p> Merci d'avance. P> P>
3 Réponses :
Si votre tuple a une taille fixe de 4 et la position des flotteurs est toujours la même, vous pouvez le faire:
>>> t2 = tuple(map(lambda x: isinstance(x, float) and round(x, 2) or x, t))
>>> t2
('string 1', 1234.56, 5.67, 'string2')
C'est un duplicata. Le lien a été fourni comme commentaire. Il serait préférable de simplement le pointer et de marquer cette question en tant que duplicata.
Le lien n'était pas là quand j'ai écrit ma réponse et les questions pourraient être différentes. Peut-être qu'il a des problèmes de gérer le tuple et non avec l'arithmétique de points flottants en général?
@pyfunc je ne dirais pas que c'est un duplicata. Il est lié mais je pense que la "solution générale" postée par @ tux21b est ce que l'OP pourrait essayer d'obtenir. Au moins, c'est comme ça que je comprends, comment faire des flotteurs / doubles dans un tuple contenant d'autres valeurs d'autres types.
@pyfunc: Il est associé à ne pas dupliquer. Le problème de l'OP peut bien être que ATUPLE [1] = rond (ATUPLE [1], 2) code> échoue alors qu'il fonctionne avec une liste. Nouvelle pensée: essayez de demander à l'op de quoi son vrai problème est.
Solution de compréhension de la liste:
t = ('string 1', 1234.55555, 5.66666, 'string2')
solution = tuple([round(x,2) if isinstance(x, float) else x for x in t])
Pour éviter Problèmes avec des erreurs d'arrondi à point flottant , vous Peut utiliser décimal.decimal code> Objets: arrondi_tuple code> utilise un Expression génératrice à l'intérieur d'un appel à tuple. p> p>
Il y a un thread connexe sur SO: Stackoverflow.com/questions/455612/...