powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему так?
11 сообщений из 11, страница 1 из 1
Почему так?
    #34735409
Почему если так, то точность теряется при приведении типов:
Код: plaintext
1.
2.
3.
4.
5.
 long  a = 98765432112345678L;
 float  f = a;      //неявное приведение long к float
 long  b = ( long ) f;   // явное приведение

System.out.println(b);  //выводит значение, меньшее чем a, так как преобразование исказило результат

а если так:
Код: plaintext
1.
2.
3.
4.
5.
 long  a =  Long .MAX_VALUE;
 float  f = a;      //неявное приведение long к float
 long  b = ( long ) f;   // явное приведение

System.out.println(b);  //выводит тоже самое значение, что и было в a
...
Рейтинг: 0 / 0
Почему так?
    #34735413
Во втором варианте значение не исказилось...
...
Рейтинг: 0 / 0
Почему так?
    #34735454
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что 98765432112345678L > Long.MAX_VALUE
...
Рейтинг: 0 / 0
Почему так?
    #34735469
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя нет. ашипся.
...
Рейтинг: 0 / 0
Почему так?
    #34735479
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто какие то значения можно точно апроксимировать, а какие то нельзя без потери точности
...
Рейтинг: 0 / 0
Почему так?
    #34735524
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хыдыщ.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
        DecimalFormat dformat =  new  DecimalFormat("00000000000000000");
        
        {            
            System.out.println("VALUE = 98765432112345678L");
            
             long  a = 98765432112345678L;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение
            
            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }
        
        {            
            System.out.println("VALUE = Long.MAX_VALUE");

             long  a =  Long .MAX_VALUE;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение

            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }

Объяснять подробнее?
...
Рейтинг: 0 / 0
Почему так?
    #34736148
Primax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрюхрюшкин
Если можно )
...
Рейтинг: 0 / 0
Почему так?
    #34736152
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primax Хрюхрюшкин
Если можно )

Надеюсь, вы выполнили пример и увидели на экране такие цифры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
VALUE = 98765432112345678L
a =  98765432112345678 
b =  98765435851243520 
f =  98765435851243520 
VALUE =  Long .MAX_VALUE
a =  9223372036854775807 
b =  9223372036854775807 
f =  9223372036854776000 


Вы должны были заметить, что строго говоря, float ни в одном, ни в другом случае, не содержал правильного значения переменной "a" до мантиссы.
Почему же во втором случае мы получили правильный результат?

А ты напиши
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        {
            System.out.println("VALUE = Long.MAX_VALUE");

             long  a =  Long .MAX_VALUE -  20 ;
             float  f = a; //неявное приведение long к float
             long  b = ( long ) f; // явное приведение

            System.out.println("a = " + a);
            System.out.println("b = " + b);
            System.out.println("f = " + dformat.format(f));
        }


Посмейся и вспомни, как хранится число float в памяти.
...
Рейтинг: 0 / 0
Почему так?
    #34736154
Primax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрюхрюшкин.Посмейся и вспомни, как хранится число float в памяти.
да в том и проблема, что не нахожу поводов для смеха т.к. не понимаю в чем ошибка была в первом случае...
...
Рейтинг: 0 / 0
Почему так?
    #34736155
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primax
да в том и проблема, что не нахожу поводов для смеха т.к. не понимаю в чем ошибка была в первом случае...
Ну тогда кури, блин, документацию . Это, кстати, полезно время от времени делать и запросто так.
...
Рейтинг: 0 / 0
Почему так?
    #34736156
Фотография Хрюхрюшкин.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть выше описание и Widening Primitive Conversion
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему так?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]