F. Kaindl
F. Kaindl

Reputation: 35

Java Double convert to Int round

I want to convert a double value to int when and only when 2 numbers after the dot are 0.

Example

double x = 25.001

Upvotes: 1

Views: 437

Answers (3)

Youcef LAIDANI
Youcef LAIDANI

Reputation: 59960

You can use this :

double x = 25.001;
int i = (int) x;
System.out.println(x);//Input
if (x - i <= 0.01) {
    x = (int) x;
}
System.out.println(x);//Output

RESULT

Input                Output
25.001               25.0
25.011               25.011

If you want to use a second variable you can use :

int y = 0;
if (x - i <= 0.01) {    
    y = (int) x;
}

Note

But note, in case your input is not correct, you will always get 0, i like the first solution it is good then the second.

Upvotes: 1

Joop Eggen
Joop Eggen

Reputation: 109547

That rounded number you then cannot store in a double, as a double is always an approximation of a real value - of a series of a (negative) power of 2.

So you should go for BigDecimal as many do that want to do financial software.

If you did something like:

double adjustWhenCloseToInt(double x) {
    long n = Math.round(x); // Could overflow for large doubles
    if (Math.abs(x - n) < 0.01) {
        x = n;
    }
    return x;
}

A simple

x = adjustWhenCloseToInt(x);
System.out.print(x);

Could still print 0.00000001 or such.

The solution there is

System.out.printf("%.2f", x);

Or better use a localized MessageFormat (thousand separators and such).

As floating point always bears rounding errors, I would in general go for BigDecimal, though it is a circumstantial class to use. Take care to use String constructors:

new BigDecimal("3.99");

As they then can maintain a precision of 2.

Upvotes: 0

Sandesh Baliga
Sandesh Baliga

Reputation: 663

if(x-Integer.parseInt(x)>=0.001) //Convert here

Upvotes: 0

Related Questions