# Math.round()

kavita desai

Greenhorn

Posts: 16

posted 15 years ago

Hi, my question is from poddar's mock exam. isn't Math.round(f6) supposed to return -6?

{ float f4 = -5.5f;

float f5 = 5.5f;

float f6 = -5.49f;

float f7 = 5.49f;

System.out.println("Round f4 is " + Math.round(f4));

System.out.println("Round f5 is " +Math.round(f5));

System.out.println("Round f6 is " + Math.round(f6));

System.out.println("Round f7 is " + Math.round(f7)); }

ans: Round f4 is -5 Round f5 is 6 Round f6 is -5 Round f7 is 5

{ float f4 = -5.5f;

float f5 = 5.5f;

float f6 = -5.49f;

float f7 = 5.49f;

System.out.println("Round f4 is " + Math.round(f4));

System.out.println("Round f5 is " +Math.round(f5));

System.out.println("Round f6 is " + Math.round(f6));

System.out.println("Round f7 is " + Math.round(f7)); }

ans: Round f4 is -5 Round f5 is 6 Round f6 is -5 Round f7 is 5

Mini Pilla

Ranch Hand

Posts: 112

Ashish Hareet

Ranch Hand

Posts: 375

posted 15 years ago

Here's how the round() method is in the source

<pre>

public static int round(float a) {

return (int)floor(a + 0.5f);

}

</pre>

And here's what the floor method does(since it's native refer to API)

<pre>

floor

public static double floor(double a)

Returns the largest (closest to positive infinity) double

value that is not greater than the argument and is equal to a mathematical integer.

Parameters:

a - a double value.

a - an assigned value.

Returns:

the largest (closest to positive infinity) double value that is not greater than the argument and is equal

to a mathematical integer.

</pre>

So to estimate the rounded off value we add 0.5 to our number & then get the largest double value that is not greater than the argument & is equal to a maths integer . For instance

Math.round(-5.49f)

Add 0.5 ---> -5.49 + 0.5 = -4.99

Get the largest double value

that's a maths integer

but not greater than the argument ----> -5

So , Math.round(-5.49) = -5

Correct me if I'm wrong ( First time i've looked at the source)

Ashish

[This message has been edited by Ashish Hareet (edited July 29, 2001).]

<pre>

public static int round(float a) {

return (int)floor(a + 0.5f);

}

</pre>

And here's what the floor method does(since it's native refer to API)

<pre>

floor

public static double floor(double a)

Returns the largest (closest to positive infinity) double

value that is not greater than the argument and is equal to a mathematical integer.

Parameters:

a - a double value.

a - an assigned value.

Returns:

the largest (closest to positive infinity) double value that is not greater than the argument and is equal

to a mathematical integer.

</pre>

So to estimate the rounded off value we add 0.5 to our number & then get the largest double value that is not greater than the argument & is equal to a maths integer . For instance

Math.round(-5.49f)

Add 0.5 ---> -5.49 + 0.5 = -4.99

Get the largest double value

that's a maths integer

but not greater than the argument ----> -5

So , Math.round(-5.49) = -5

Correct me if I'm wrong ( First time i've looked at the source)

Ashish

[This message has been edited by Ashish Hareet (edited July 29, 2001).]

Guoqiao Sun

Ranch Hand

Posts: 317

posted 15 years ago

Hi, here is my method:

For round() method,

any number falling inside -5.5(inclusive)~-5.0 will get -5.0

any number falling inside +5.5(inclusive)~+6.0 will get +6.0

notice that the result is to positive x axis direction.

similarly,

any number falling inside -6.0~-5.5(exclusive) will get -6.0

any number falling inside +5.0~+5.5(exclusive) will get +5.0

notice that the result is to negative x axis direction.

Hope it helps.

Guoqiao

[This message has been edited by Guoqiao Sun (edited July 29, 2001).]

For round() method,

any number falling inside -5.5(inclusive)~-5.0 will get -5.0

any number falling inside +5.5(inclusive)~+6.0 will get +6.0

notice that the result is to positive x axis direction.

similarly,

any number falling inside -6.0~-5.5(exclusive) will get -6.0

any number falling inside +5.0~+5.5(exclusive) will get +5.0

notice that the result is to negative x axis direction.

Hope it helps.

Guoqiao

[This message has been edited by Guoqiao Sun (edited July 29, 2001).]

Guoqiao Sun<br />SCJP2 SCWCD2<br />Creator of <a href="http://www.jiris.com/" target="_blank" rel="nofollow">www.jiris.com</a>, Java resource, mock exam, forum