0
votes

Affichage à deux points décimaux de Python 3.x ... mais aussi sans ces décimales, le cas échéant - comment?

en Python 3.8 J'essaie d'obtenir une valeur de flotteur à afficher comme suit:

  • Si le nombre a plus de 2 points décimaux, il devrait être arrondi à 2 points décimaux.
  • Si le nombre a un point décimal, il devrait afficher comme un seul point décimal.
  • Si le nombre n'a pas de décimal points, il ne devrait pas afficher avec un point décimal du tout.

    Je suis au courant de "rond". Si j'ai ce programme: xxx

    • Entrée 3.141 Résultats 3.14 (Good)
    • Entrée 3.1 Résultats en 3.1 (Good)
    • entrée 3 résulte 3.0 (mauvais, je veux 3)

      Je suis également conscient que je peux faire cela: xxx

      Cela ne reçoit pas ce que je veux non plus:

      • Entrée 3.141 Résultats 3.14 (Good)
      • Entrée 3.1 Résultats en 3.10 (mauvais, je veux 3.1)
      • entrée 3 résulte de 3,00 (mauvais, je veux 3)

        Comment puis-je résoudre ce problème?


5 commentaires

Ne sonne pas trop difficile pour coder - veuillez éditer votre propre tentative de résoudre cela dans votre question.


Euh ... j'ai déjà deux tentatives là-bas?


Er ... Je pense que vous avez simplement montré ce que la bibliothèque standard rond () et l'impression formatée est et a démontré qu'ils ne peuvent pas résoudre votre problème, ce qui va bien, mais Je ne vois pas aucune tentative d'écrire un code peut-être peut-être autour de ces fonctions à en fait résoudre le problème.


Est-ce que cela répond à votre question? Comment montrer un point décimal uniquement quand il est Pas un nombre entier?


@Georgy Oui, mais j'aime bien la réponse de Sneehil Ci-dessous mieux, c'est effectivement similaire mais plus simple et plus érudite, certainement le plus facile à comprendre. C'est le genre de réponse que je me sens stupide pour ne pas penser à moi-même.


6 Réponses :


3
votes

Vous pouvez simplement faire ce xxx


0 commentaires

1
votes

Vous voulez dire quelque chose comme ça? XXX


1 commentaires

Merci! C'est bon, mais un peu impliqué, je ne voulais pas ajouter de fonctions à mon programme.



6
votes

Vous pouvez utiliser les types de format généraux de formatage des chaînes.

print('input a number')
chuu = float(input())
print('{:g}'.format(round(chuu, 2)))


0 commentaires

2
votes

Voir si cela convient!

#Demonstration
li = [0.00005,1.100005,1.00001,0.00001,1.11111,1.111,1.01,1.1,0.0000,5,1000]
meth1 = lambda chu: chu if type(chu)!=float else ('{0:.2f}' if(len(str(chu).split('.')[-1])>=2) else '{0:.1f}').format(round(chu,2))

print(*map(meth1,li))

output
0.00 1.10 1.00 0.00 1.11 1.11 1.01 1.1 0.0 5 1000


4 commentaires

Oui, j'ai pensé à faire quelque chose avec la manipulation de chaîne où je pouvais convertir une chaîne, regarder les deux derniers chiffres, etc. Mais j'étais après quelque chose de plus élégant et pythonique que cela.


J'ai fait des modifications, voir si c'est ce que vous recherchez. Cela n'implique pas une fonction et sa pythonique.


Qu'est-ce que cela fait pour 0.00005 ?


@mark remercie de pointer que je n'ai pas apporté de modifications à la réponse, mais même cette approche ne fonctionnerait pas avec des nombres négatifs



1
votes

Cette solution est plus basée sur la chaîne

def dec(s):
    s = s.rstrip('.')
    if(s.find('.') == -1): 
        return s
    else:
        i = s.find('.')
        return s[:i] + '.' + s[i+1:i+3]


print(dec('3.1415'))
print(dec('3'))
print(dec('1234.5678'))
print(dec('1234.5'))
print(dec('1234.'))
print(dec('1234'))
print(dec('.5678'))

3.14
3
1234.56
1234.5
1234
1234
.56


1 commentaires

Merci! C'est quelque chose que j'ai eu dans le fond de mon esprit lors de la question et je suppose que le genre de chose que j'allais essayer si je ne pouvais pas obtenir une solution de numération plus élégante.



2
votes

Si vous ne le voulez que pour l'impression, les travaux suivants. XXX

Cependant, cela transformera les nombres de 3,0 en seulement 3. (pas clair si vous vouliez ce comportement ou non) < / p>


1 commentaires

Oui, cela fonctionne bien et fera parce que je veux seulement imprimer plutôt que de calculer. Cependant, vous préférez ne pas importer de module si je n'ai pas besoin.