## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Rounding Floating-Point Numbers

## Problem

You need to round floating-point numbers to integer or to a particular precision.

## Solution

If you simply cast a floating value to an integer value, Java will truncate the value. A value like 3.999999 casted to an `int` or `long` will give 3, not 4. To round these properly, use `Math.round( )` . There are two forms; if you give it a `double`, you get a `long` result. If you give it a `float`, you get an `int`.

What if you don’t like the rounding rules used by `round`? If you wanted to round numbers greater than 0.54 instead of the normal 0.5, you could write your own version of `round( )`:

```// Round.java
/** Round a number up if its fraction exceeds this threshold. */
public static final double THRESHOLD = 0.54;
/* Return the closest long to the argument.
* ERROR CHECKING OMITTED.
*/
static long round(double d) {
long di = (long)Math.floor(d);    // integral value below (or ==) d
if ((d - di) > THRESHOLD)
return di + 1;
else return di;
}```

If you need to display a number with less precision than it normally gets, you will probably want to use a `DecimalFormat` object.

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required