Convertir flotter à la chaîne sans sprintf()
Je suis codant pour un microcontrôleur basé sur l'application et j'ai besoin de convertir un float
à une chaîne de caractères, mais je n'ai pas besoin de lourds frais généraux associés à sprintf(). Est-il un éloquent pour ce faire? Je n'ai pas besoin de trop. J'ai seulement besoin de 2 chiffres de précision.
Je me peur que
Je suis d'accord. La raison en est parce que je suis en développement dans IAR Embedded Workbench et je suis en utilisant le code de taille limitée (étudiant) version. Donc, sprintf() gonfle mon code sur le 4k limite.
Non, il ne sera pas. Il fait exactement le contraire de ce que je veux. Je veux aller de flotter à la chaîne.
puis je envisager de faire à partir de zéro , même si je ne sais pas combien il sera mieux que
Un vélo odomètre? Pourquoi avez-vous besoin de flotteurs?
sprintf
est votre unique option, d'ailleurs mon principal travail est avec des microcontrôleurs et je n'ai jamais ressenti la nécessité de raccourci sprintf
!! u pourrait me dire quelle est votre raison (juste de la curiosité)Je suis d'accord. La raison en est parce que je suis en développement dans IAR Embedded Workbench et je suis en utilisant le code de taille limitée (étudiant) version. Donc, sprintf() gonfle mon code sur le 4k limite.
Non, il ne sera pas. Il fait exactement le contraire de ce que je veux. Je veux aller de flotter à la chaîne.
strtof()
fait le contraire: string -> float.puis je envisager de faire à partir de zéro , même si je ne sais pas combien il sera mieux que
sprintf
Sont vos nombres réels à venir dans une gamme raisonnable ?Un vélo odomètre? Pourquoi avez-vous besoin de flotteurs?
OriginalL'auteur audiFanatic | 2014-04-21
Vous devez vous connecter pour publier un commentaire.
De l'essayer. Ça devrait être sympa et les petits. Je l'ai sortie de la chaîne de directement faire un printf, plutôt que d'un sprintf. Je vais le laisser à vous pour allouer de l'espace pour la chaîne de retour, ainsi que de copier le résultat dans.
0.005
àfVal
au début; de cette façon, vous ne finissent pas avec des choses comme 269.9999834 imprimé en269.99
au lieu de270.00
.(int)(fVal * 100)
facilement échoueint
en raison de la conversion à être hors de portée. Pourtant, il apparaît que l'OP n'est pas ce qui le préoccupe.OriginalL'auteur enhzflep
OriginalL'auteur Chaithra
Pendant que vous les gars ont répondu, je suis venu avec ma propre solution qui fonctionne le mieux pour mon application et je me dis que je pourrais partager avec vous. Il ne convertit pas le flotteur à une chaîne, mais plutôt 8 bits entiers. Ma gamme de nombre est très faible (0 à 15) et toujours non-négatif, de sorte que cela va me permettre d'envoyer des données par bluetooth de mon application android.
flt += 0.005
premier.Vrai, merci pour la correction
Que ferais-je si je voulais à 9 chiffres de précision?
La réponse rapide est
flt += 1e-9/2; ... flt = (flt - bytes[1])*1e9;
mais d'autres questions comme les math entier de débordement peuvent entrer en jeu d'ailleurs. Mieux à l'élaboration d'une réponse après vous fournir les détails de votre choix de la gamme et le type de prévue d'entrée/sortie.OriginalL'auteur audiFanatic
Je ne peux pas commenter sur enhzflep de la réponse, mais de gérer les nombres négatifs correctement (dont la version actuelle ne fonctionne pas), vous avez seulement besoin d'ajouter
au début de la fonction.
OriginalL'auteur Petrus
Son un Liitle grande méthode, mais Cela fonctionne pour les deux int et float, decimalPoint paramètre est passé avec la valeur zéro pour Entier, s'il vous Plaît laissez-moi savoir si vous avez plus petite fonction que ce.
OriginalL'auteur Sumir Kumar Jha