How to round float number in Android

25,346

Solution 1

Here is my old code golf answer.

public class Main {

    public static void main(String[] args) {
        System.out.println(math(1.5f));
        System.out.println(math(1.500001f));
        System.out.println(math(1.49999f));
    }

    public static int math(float f) {
        int c = (int) ((f) + 0.5f);
        float n = f + 0.5f;
        return (n - c) % 2 == 0 ? (int) f : c;
    }

}

Output:

1
2
1

Solution 2

to round a float value f to 2 decimal places.

String s = String.format("%.2f", f);

to convert String to float...

float number = Float.valueOf(s)

if want to round float to int then.... there are different ways to downcast float to int, depending on the result you want to achieve.

round (the closest integer to given float)

int i = Math.round(f);

example

f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3

Solution 3

You could use String.format.

String s = String.format("%.2f", 1.2975118);

Solution 4

I like simple answers,

Math.round(1.6); // Output:- 2
Math.round(1.5); // Output:- 2
Math.round(1.4); // Output:- 1
Share:
25,346
Long Dao
Author by

Long Dao

Updated on July 09, 2022

Comments

  • Long Dao
    Long Dao almost 2 years

    I am stuck in the scenario below:

    If x is 1.5 or lower then the final result will be x = 1. If x is large than 1.5 then x = 2.

    The input number will be x/100.

    For instance: input = 0.015 => x = 1.5 => display x = 1.

    The problem I got is that float number is inaccurate. For example: input = 0.015 but actually it is something like 0.01500000000000002. In this case, x gonna be 1.500000000000002 which is large than 1.5 => display output is x = 2.

    It happen so randomly which I don't know how to solve it. Like 0.5, 1.5 will give me the correct result. But 2.5, 3.5, 4.5, 5.5 will give me the wrong result. Then 6.5 will give me the correct result again.

    The code I implemented is below:

    float x = 0.015;
    NumberFormat nf = DecimalFormat.getPercentInstance();
    nf.setMaximumFractionDigits(0);
    output = nf.format(x);
    

    So depends on x, the output might be right or wrong. It is just so random.

    I alos tried to use Math.round, Math.floor, Math.ceils but none of them seems work since float number is so unpredictable.

    Any suggestion for the solution?

    Thanks in advance.

  • Long Dao
    Long Dao over 7 years
    DecimalFormat returns String mate.
  • Long Dao
    Long Dao over 7 years
    Hi there, seems like the outputs I need. Can you explain a bit about the math function that you wrote please? I am not fully understand. Thanks.
  • Enzokie
    Enzokie over 7 years
    Which part sir? Also I can explain it through skype :)
  • Long Dao
    Long Dao over 7 years
    I am confused about using int c and float n?
  • Enzokie
    Enzokie over 7 years
    the int c serves as the cutted value while the float n holds the full value of the result. Since your goal is to round when the number is greater than lets say 1.5, I am just going to check if there is a remainder. I'm really sorry I suck at explaining :(
  • Enzokie
    Enzokie over 7 years
    the 1.5 will have no remainder but 1.5002 will have.
  • Archana
    Archana over 7 years
    Yes, DecimalFormat is used to just specify the format that you want. And format() will take of it. Check with the output which is long not a String
  • Long Dao
    Long Dao over 7 years
    Yeah I tested all the possible situations. This is the correct answer. Thanks a lot. :)
  • Long Dao
    Long Dao over 7 years
    well if you have float number, let's say 0.00015 or 0.00025. At some points it rounds up, some points it rounds down. Still not that accurate. Anyway thanks for the suggestion.
  • Enzokie
    Enzokie over 7 years