Go Down

Topic: Issue with Float/Double in Arduino (Read 3507 times)previous topic - next topic

chiru42

Feb 01, 2012, 05:55 am
hey folks,

i was not able to come out of the shock that in Arduino float/double supports only two digits after decimal.! even though it was mentioned 6-7digits of precision including the digits before and after the decimal. can someone help me to overcome this problem.

i wanted to read a value if 0.009, 0.000008 etc...such kindof  values...

any help is appriciated..!

thnq,
chiru

bigluc

#1
Feb 01, 2012, 06:54 am
While I haven't found anything for this, using some simple notation would be easy. Ex: 9/100 or someVar/100

#2
Feb 01, 2012, 06:59 am
i was not able to come out of the shock that in Arduino float/double supports only two digits after decimal.!

Prove it.

retrolefty

#3
Feb 01, 2012, 07:14 amLast Edit: Feb 01, 2012, 07:16 am by retrolefty Reason: 1

hey folks,

i was not able to come out of the shock that in Arduino float/double supports only two digits after decimal.! even though it was mentioned 6-7digits of precision including the digits before and after the decimal. can someone help me to overcome this problem.

i wanted to read a value if 0.009, 0.000008 etc...such kindof  values...

any help is appriciated..!

thnq,
chiru

I think you are confusing the serial print options for floating numbers Vs the underlining percision of the arduino float variables, those are two very different things.

From the serial reference:

Quote
Syntax
Serial.print(val)
Serial.print(val, format)

Parameters
val: the value to print - any data type

format: specifies the number base (for integral data types) or number of decimal places (for floating point types)

So you can see you must supply the format parameter if you want to print for other then the default value of two digits past the decimal point.

As far as the percision of the float type used in arduino, also from the reference section:

Quote
Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.

You should be able to work out the range and percision of floats you are working with in your sketch with those two key references. Printing for example .00067 should not be a problem, as long as you format your print statement correctly.

chiru42

#4
Feb 08, 2012, 10:16 am
thnq folks....i could overcome this problem now.

thnq all

MarkT

#5
Feb 08, 2012, 04:15 pm
I'd describe the issue as a bug in the Serial print function myself - default options should not be hiding your values from you.
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

AWOL

#6
Feb 08, 2012, 04:30 pm
Quote
I'd describe the issue as a bug in the Serial print function myself - default options should not be hiding your values from you.

I disagree; the "bug" is documented on the reference page.
http://arduino.cc/en/Serial/Print
"For floating point numbers, this parameter specifies the number of decimal places to use."
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.
I speak for myself, not Arduino.

robtillaart

#7
Feb 08, 2012, 08:09 pm
@MarkT, what should be the default number of decimals for float in your opinion? (just curious)
Rob Tillaart

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

chiru42

#8
Feb 09, 2012, 05:20 am
the default number after decimal for float/double in Arduino is 2

MarkT

#9
Feb 09, 2012, 11:31 am

@MarkT, what should be the default number of decimals for float in your opinion? (just curious)

All of them, of course.  Every other programming language I can think of does this.
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

nickgammon

#10
Feb 09, 2012, 11:43 am

I'd describe the issue as a bug in the Serial print function myself - default options should not be hiding your values from you.

Well, that's what defaults do, right?

From the documentation:

Quote
Floats are similarly printed as ASCII digits, defaulting to two decimal places.

Although I like this bit:

Quote
Programming Tips
As of version 1.0, serial transmission is asynchronous; Serial.print() will return before any characters are transmitted.

They forgot to mention: "until the buffer fills up".
Please post technical questions on the forum, not by personal message. Thanks!

AWOL

#11
Feb 09, 2012, 12:02 pm
Quote
All of them, of course.  Every other programming language I can think of does this.

Has anyone tried this with a bare "%f" in C ?
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.
I speak for myself, not Arduino.

nickgammon

#12
Feb 09, 2012, 08:14 pm
Code: [Select]
`#include <stdio.h>int main (){  float f = 12.3456789;  printf ("f is %f\n", f);  return 0;}`

Output:

Code: [Select]
`f is 12.345679`
Please post technical questions on the forum, not by personal message. Thanks!