Jump to content
  • Advertisement
Sign in to follow this  
one mind

float x = 1.33333333333333 why does it equal 1?

This topic is 4996 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I have made a float like so float x = 400/300 400/300 = 1.333333333333333333333333333333333 When i find out what value x is like so this.text = x.tostring(); text = 1 for some reason Do recurring numbers get rounded off if so, how can i keep it so x = 1.3333? Thanks for any info

Share this post


Link to post
Share on other sites
Advertisement
If both numbers on either side of a division are integers a ‘integer division’ is performed. This is basicly a division that is trunctuated to an integer (for the sake of speed). To solve this you can cast the values as floats or doubles.

Example:

Floats:
400.0f / 300.0f

Floats:
( float ) 400 / (float ) 300

Doubles:
400.0 / 300.0

Hope this helps,
Jackson Allan

Share this post


Link to post
Share on other sites
Quote:
Original post by Xetrov
because you are doing an integer division.

float x = (float)400/300




Casting literals is strange. Why not this?

    float x = 400.0f / 300.0f 

Share this post


Link to post
Share on other sites
Quote:

Casting literals is strange. Why not this?

    float x = 400.0f / 300.0f 


Fair enough, but that doesnt exactly work when you want to use variables instead ;)

Share this post


Link to post
Share on other sites
Quote:
Original post by Xetrov
Fair enough, but that doesnt exactly work when you want to use variables instead ;)


(Kicking the man while he's down.)
C casts are evil (unless you're programimng in pure C).
Prefer static_cast<float>(a)/b.
That way it is obvious what the cast is applied to.
(does the cast in (float)a/b apply to a or to a/b ?)

[wink]

Share this post


Link to post
Share on other sites
Quote:
Original post by Fruny
Prefer static_cast<float>(a)/b.
That way it is obvious what the cast is applied to.
(does the cast in (float)a/b apply to a or to a/b ?)

Although C-casts are ugly, I usually find this nice:
float(a)/b

Share this post


Link to post
Share on other sites
That's not a C cast, you're creating a temporary float from a. I guess in the end it's exactly the same, but I'm going to say they're different, so har!

Share this post


Link to post
Share on other sites
Quote:
Original post by dalleboy
Quote:
Original post by Fruny
Prefer static_cast<float>(a)/b.
That way it is obvious what the cast is applied to.
(does the cast in (float)a/b apply to a or to a/b ?)

Although C-casts are ugly, I usually find this nice:
float(a)/b


float x = (float)(a/b) is the way I did

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!