2017-10-03 4 views
0

Je la programmation d'un microcontrôleur en C et étant donné que le compilateur ou puce ne gère pas les nombres à virgule flottante très bien, il est recommandé à l'échelle de la valeur suffisante de virgule flottante à se débarrasser de la virgule décimale, puis lors de la sortie du numéro, redimensionner avec une division proportionnelle et utiliser le module pour trouver et afficher la partie fractionnaire. Voici un exemple: Commencez avec le numéro 25.0625. Multiplier par 10000 pour obtenir 250625. Bon maintenant nous n'avons plus de flotteur. Maintenant, pour afficher ce que nous utilisons une ligne comme celle-ci:Programmation en C: Module ignore-t-il les zéros en tête dans le résultat? Comment puis-je l'arrêter?

sprintf(buffer, "%li.%i", Temp/10000, abs(Temp % 10000)); 

Nous avons donc d'abord obtenir le 25 par / 10000 retour, nous obtenons la 0625 par % 10000. Voici le problème: il semble que mon résultat de module ignore le zéro de 0625, donc quand il concatène le numéro ensemble, il devient 25.625 au lieu de 25.0625. Je ne peux pas compter sur le fait qu'il y ait toujours un zéro, donc il ne suffit pas d'y ajouter un zéro, et d'autres fois il peut y avoir plusieurs zéros. Ma question est, comment puis-je supprimer le module d'exclure les zéros de tête? Merci.

+1

zéros en tête n'existent pas numériquement; utilisez '% 04i' pour formater un entier de quatre chiffres. – Ryan

+1

Les nombres n'ont pas de zéros, ce ne sont que des nombres. Vous pouvez utiliser le format '% 04d' pour l'imprimer avec 4 chiffres. – Barmar

+0

BTW, 'sprintf (tampon,"% li.% I ", Temp/10000, abs (Temp% 10000));' est certainement faux sortie avec 'Temp = -123'. – chux

Répondre

3

Vous pouvez dire sprintf formater le nombre dans un champ à 4 chiffres avec des zéros non significatifs.

sprintf(buffer, "%li.%04d", Temp/10000, abs(Temp % 10000)); 

Voir Printing leading 0's in C?

+0

Aussi '% .4d' fait le même travail. Il y en a qui prétendent qu'il est préféré à «% 04d». –

+0

@JonathanLeffler Je ne vois pas cette recommandation dans aucune des réponses à la question à laquelle je viens de faire référence. – Barmar

+0

Il semble manquer. Je voudrais creuser une référence pour "il y a ceux qui ..." avant d'aller beaucoup plus loin. Le x-rouge est également à propos des codes postaux plutôt que de l'arithmétique entier/à virgule fixe. –