• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 213
  • Last Modified:

split a float in characters

We are programming PIC16c73a with a C-Compiler (PCM). This is normal C without any special libraries.
Now we have a float (18.1235468), we have to output this number serial (I2C - Bus). We want only one number after the the point (18.1) to put this number serial, we need each numbe alone (n1 = 1; n2 = 8; n3 = 1......)
Can anybody help us???

Thank you very much!!
0
zulliger
Asked:
zulliger
  • 4
  • 3
  • 2
  • +1
1 Solution
 
ozoCommented:
char n[100];
#include <stdio.h>
char n1,n2,n3,n4;
sprintf(n,"%.1f",18.1235468);
n1 = n[0];
n2 = n[1];
n3 = n[2];
n4 = n[3];
0
 
TheMadManiacCommented:
char buffer[100];
sprintf(buffer,"%.1f".float_number);

this will give you a buffer which you can send ofcourse use byte by byte :)

hope it helps
0
 
TheMadManiacCommented:
It seems ozo was earlier with the answer, so i suppose he should get the points. (sorry ozo, but i hadn't even seen your comment :)
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
zulligerAuthor Commented:
sorry, can someone tell me, how to get the points to the right person??

.. Thank you for your answers!
0
 
TheMadManiacCommented:
just reject mine, and then ask ozo to answer it, then you can grade it
(also place a comment that ozo should be the only one to post the answer)
0
 
zulligerAuthor Commented:
Ozo you can now post the answer...
0
 
ozoCommented:
Ok.
(although 2 minutes doesn't seem like much difference to exclude one of two identical answers,
we were probably typing at the same time, runnning the program to check syntax,
(although I don't know how my first two lines got swapped pasting it here)
it would seem fairer to me if there were a wayto split the points in such cases)
0
 
TheMadManiacCommented:
ozo, perhaps you're right, but this way is better than getting someone in the end telling me i stole their points :)
0
 
alexoCommented:
Ozo, your answer is wrong.  It will corrupt the stack (or other variables) with the terminating zero of the string.  It assumes a  maximum size of the fixed part.  It will not work on any architecture/compiler that choses to align the char variables on a word boudary, rearrange the order of the variables on the stack, put n2, n3 and/or n4 in registers, etc.

TheMadManiac's solution (except the typo - the second period should be a comma) is much safer.
0
 
ozoCommented:
alexo, MadManiac and I both assumed a maximum size of 100,
which I admit is sloppy, but seems safe enough on the literal constant 18.1235468
On a variable you should check that the magnitude is < 1e96
I made no assumptions about whether n2, n3, n4 are in registers or stacked.
0
 
alexoCommented:
Ozo, please disregard my comment.  I have no idea what posessed me to write what I did.  (I thought the first argument was n1 and not n.  I'm off to buy a bigger monitor, better glasses and a foot-from-mouth remover.)  Please accept my humble apologies.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 4
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now