wood burning stoves 2.0*
The moose likes Beginning Java and the fly likes How to round a float with a 0.25 step Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "How to round a float with a 0.25 step" Watch "How to round a float with a 0.25 step" New topic
Author

How to round a float with a 0.25 step

Alessandro Camel
Ranch Hand

Joined: Jul 03, 2009
Posts: 35
I need to round a float in this way:

2.0----> 2.0
2.125-> 2.0
2.25--> 2.25
2.375-> 2.25
2.5----> 2.5
2.625-> 2.5
2.75--> 2.75
2.875-> 2.75
3.0----> 3.0

Can someone help me please ?
I am writing a lot of code, but I am sure there is a "smart" way to do that!! ;)

Thanks!
Hebert Coelho
Ranch Hand

Joined: Jul 14, 2010
Posts: 754

Maybe this will help:
http://www.java-forums.org/advanced-java/4130-rounding-double-two-decimal-places.html
http://www.java-tips.org/java-se-tips/java.math/how-to-round-a-double.html


[uaiHebert.com] [Full WebApplication JSF EJB JPA JAAS with source code to download] One Table Per SubClass [Web/JSF]
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
Why are you using floats rather than doubles? Try multiplying by 4, adding 0.125, using the floor(double) method, and dividing by 4 again. You may, however, introduce imprecision into your results like that. Note you will end up with a double by that technique.
Alessandro Camel
Ranch Hand

Joined: Jul 03, 2009
Posts: 35
I end up with something like this:


output:


I am using float, because these are really simple numbers: the larger number used in the program could be 15! ;)
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19543
    
  16

Multiply by 4, floor (not round), divide by 4 again. You'll get (original, *4, rounded, /4):
As for the imprecision that Campbell was talking about, I don't think that will happen since you're only working with multiples of 2. These can be represented 100% accurately in doubles (as long as neither the integer part becomes too large or the decimal part becomes too small).


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
You should still not use floats, even for small numbers. Where are you getting 0.13 from? That will not give the right answer at all.
You will get imprecision for numbers like 2.3, but presumably, as Rob suggests, the “floor”ing will get rid of that.
I think I should have said add 0.5, not 0.125. Sorry for that mistake.
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19543
    
  16

I never said that flooring would get rid of precision problems (although it probably will). What I said is that because the decimal parts are all of a form of a*1/2 + b*1/4 + c*1/8, these can be represented in float / double with accurate precision, as long as the integer part doesn't cause it to be cut off.

As for float, because these numbers are so small, there will also be no problem with precision loss.
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 36508
    
  16
I think we actually agree, Rob. Only I am not expressing myself clearly.
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 13875
    
  10

Here is another approach, using a NavigableSet:


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: How to round a float with a 0.25 step
 
Similar Threads
a question from Poddar's exam
Learning spring question (2.5 vs 3.0)
rint() and round()
Java program Grade
here are my findings