Precyzja utracona w wartości float za pomocą Java

Podany poniżej kodu testowego i jego wyjścia. Gdy otrzymuję wartość zmiennoprzecinkową z wartości liczbowej, precyzja jest tracona. Czy ktoś może mi powiedzieć, dlaczego to zachowanie i jak sobie z tym poradzić?

public static void main(String[] args)
    {
        try
        {
            java.lang.Number numberVal = 676543.21;
            float floatVal = numberVal.floatValue();
            System.out.println("Number value    : " + numberVal);
            System.out.println("float value     : " + floatVal);
            System.out.println("Float.MAX_VALUE : " + Float.MAX_VALUE);
            System.out.println("Is floatVal > Float.MAX_VALUE ? " + ( floatVal > Float.MAX_VALUE));
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

wydajność:

    Number value    : 676543.21
    float value     : 676543.2
    Float.MAX_VALUE : 3.4028235E38
    Is floatVal > Float.MAX_VALUE ? false

także dlaczego wartość zmiennoprzecinkowa jest mniejsza niż Float.MAX_VALUE?

questionAnswers(5)

yourAnswerToTheQuestion