zulliger
asked on
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!!
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!!
char buffer[100];
sprintf(buffer,"%.1f".floa t_number);
this will give you a buffer which you can send ofcourse use byte by byte :)
hope it helps
sprintf(buffer,"%.1f".floa
this will give you a buffer which you can send ofcourse use byte by byte :)
hope it helps
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 :)
ASKER
sorry, can someone tell me, how to get the points to the right person??
.. Thank you for your answers!
.. Thank you for your answers!
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)
(also place a comment that ozo should be the only one to post the answer)
ASKER
Ozo you can now post the answer...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ozo, perhaps you're right, but this way is better than getting someone in the end telling me i stole their points :)
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.
TheMadManiac's solution (except the typo - the second period should be a comma) is much safer.
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.
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.
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.
#include <stdio.h>
char n1,n2,n3,n4;
sprintf(n,"%.1f",18.123546
n1 = n[0];
n2 = n[1];
n3 = n[2];
n4 = n[3];