• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Paul Clapham
  • Ron McLeod
Sheriffs:
  • Jeanne Boyarsky
  • Liutauras Vilda
Saloon Keepers:
  • Tim Holloway
  • Carey Brown
  • Roland Mueller
  • Piet Souris
Bartenders:

What is the difference between a double and a float?

 
Ranch Hand
Posts: 267
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I keep encountering an error in my programs whenever I have float variables. In debugging the error usually says something along the lines of found a double required a float. I thought if I had a floating point result and I used floating point variables I would get a float as out put i.e float = float * float.
 
Ranch Hand
Posts: 1055
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Can you post a simple test case?
 
Matt Kidd
Ranch Hand
Posts: 267
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Here is the code:

Actual error is Found: double Required: float

(Marilyn reformated long line in code)
[ August 09, 2002: Message edited by: Marilyn de Queiroz ]
 
Anthony Villanueva
Ranch Hand
Posts: 1055
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Matt,
After running the program I discovered 2 things:
1. the literal 1.5 is a double. Use 1.5f instead.
2. I need a raise.
 
Matt Kidd
Ranch Hand
Posts: 267
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
What makes the compiler believe 1.5 is a double and not a float?
 
Anthony Villanueva
Ranch Hand
Posts: 1055
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Because of the JLS:


A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d.

 
Greenhorn
Posts: 18
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi
with respect to capacity.
 
Sheriff
Posts: 9109
12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Matt Kidd:
What makes the compiler believe 1.5 is a double and not a float?



In java the default decimal is a double, not a float. You have to specifically state when you want a float (22.5F)
 
Ranch Hand
Posts: 269
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Matt,
To be convinced of the difference between float and double ,and the danger in type casting, you can run this simple test program:

The output ought to be
f = 0.95
d = 0.95
d==f? false
(double)f= 0.949999988079071
 
Ranch Hand
Posts: 192
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

C:\Java\EigeneJavaProgramme>javac GrossPay1.java
GrossPay1.java:4: possible loss of precision
found : double
required: float
float hoursWorked = 3.056;
^
GrossPay1.java:5: possible loss of precision
found : double
required: float
float workRate = 4.0125;
^
GrossPay1.java:9: possible loss of precision
found : double
required: float
yourPay = ((hoursWorked - 40) * (workRate * 1.5)) + (40 * workRate);
^
3 errors
Why is double found? The input of the yourPay calculation is float so the output to yourpay should
Be float, too and not double.
Thank you very much for your answers.
Thomas
 
Ranch Hand
Posts: 118
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Note the "1.5", that's treated as a double, so the whole result returns a double. Use 1.5f instead.
 
Anthony Villanueva
Ranch Hand
Posts: 1055
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Thomas. The primitive double is like the Borg among other primitive types -- any primtive type that interacts with a double will return a double. For example,
double * float
double * long
double * int
double * short
double * byte'
will return a double result.
 
Marilyn de Queiroz
Sheriff
Posts: 9109
12
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Put 'F' after each literal and it will work. If you have an expression which includes a double and a float, the float will be automatically promoted to a double.
 
Matt Kidd
Ranch Hand
Posts: 267
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks everyone...
 
Don't get me started about those stupid light bulbs.
reply
    Bookmark Topic Watch Topic
  • New Topic