Pages: [1]   Go Down
Author Topic: Float to array?  (Read 364 times)
0 Members and 1 Guest are viewing this topic.
Nova Scotia
Offline Offline
Full Member
***
Karma: 4
Posts: 187
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I have a few seven segment leds and I want the temperature ic float displayed. The code is set up so an integer is assigned to each digit.
(working test code)
 int a=1;
 int b=2;
 int c=3;
write_digits(a,b,c);

Is there an easy way to have a float to array? Then my temperature ic could do something like:
float temperature = getTemp();
somehow put the float into an array
write_digits(temp[0],temp[1],temp[2],temp[3]);
Logged

California
Offline Offline
Faraday Member
**
Karma: 82
Posts: 3123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dtostrf()

Although, since you know the precision you want, you could just multiply it by 10^n, where n is how many digits you want, assign it to an int, and send it through atoi().
« Last Edit: November 20, 2012, 03:40:16 pm by Arrch » Logged

Offline Offline
Edison Member
*
Karma: 116
Posts: 2205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Then my temperature ic could do something like:

Typically done with divisions:
Code:
 c=temperature % 10;  temperature / = 10;
  b=temperature % 10;  temperature / = 10;
  a=temperature % 10;

For that to be fast and accurate, you want temperature to be an integer.

So here is the irony of your proposal: you want to convert an integer into float, only to have to convert it back to integer so you can do what you are trying to do.

Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 170
Posts: 12487
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dhenry is 100% right, integer math is much faster. however the last - % -modulo - is not needed smiley-wink

Code:
float temperature = getTemp();
int t = (int)temperature;
c= t % 10;  t /= 10;
b=t % 10;   t /= 10;
a=t;  // assume temp = 0..999
write_digits(a,b,c);
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Nova Scotia
Offline Offline
Full Member
***
Karma: 4
Posts: 187
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

It works! Thanks to all for the help. I'm trying to figure it now since I stick to hardware design and rarely write code. I have no idea what the line t /= 10; is yet but i'll figure it out. I think I have the rest of it in my head.

Mike
Logged

California
Offline Offline
Faraday Member
**
Karma: 82
Posts: 3123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have no idea what the line t /= 10; is yet but i'll figure it out. I think I have the rest of it in my head.

Mike

It's shorthand for writing out the full assignment statement:

t = t / 10.

In English, it says take the variable t, divide it by 10 and store it back in t.
Logged

Pages: [1]   Go Up
Jump to: