Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.07.2023
Сообщений: 3
1

Деление дает неверный результат (Android Studio)

31.07.2023, 00:05. Показов 1076. Ответов 13

Author24 — интернет-сервис помощи студентам
Доброго времени суток форумчане. Впервые на данном форуме, и хотел задать вопрос:

Заметил ньюанс при выполнении простейшей операции деления целых чисел, а именно если написать так:

Java
1
2
float result = 100 / 4;
System.out.print(String.valueOf(result))
Компилятор выдаст результат: 25.0
Вроде бы ничего необычного, обычный калькулятор покажет точно такое же значение.

Однако ж, если написать:

Java
1
2
float result = 101 / 4;
System.out.print(String.valueOf(result))
Компилятор так же покажет значение 25.0 вместо положенных 25.25
0:1 в пользу калькулятора.
Для того что бы компилятор выдал корректное значение необходимо создать переменную A, переменную B
и переменную result - результат, в таком случае компилятор покажет корректный результат.

Java
1
2
3
4
float a = 100;
float b = 4;
float result = a / b;
System.out.print(String.valueOf(result))
Так же, "решением" получения верного результата является такая запись:
Java
1
float result = (float) (101.0 / 4);
В таком случае так же результатом деления будет верное значение - 25.25


Кто нибудь знает в чем может быть причина такого неадекватного поведения (Android Studio) и почему запись
Java
1
float result = 101/4;
не показывает логичный и понятный результат 25.25 а выдает что то неадекватное - 25.0 и просит кастовать выражение дописывая лишний код.
Спасибо за внимание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2023, 00:05
Ответы с готовыми решениями:

Сравнение дат дает неверный результат
Date current = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("dd-MM"); ...

Деление даёт неверный ответ
mov eax,11016 mov ebx,16384 xor edx, edx cdq idiv ebx после этого всего в edx просто...

Деление даёт неверный ответ, в чем ошибка?
mov eax,-50 imul eax, mov ebx, 180 imul eax, idiv ebx умножение нормальное(в смысле результат...

ChildWindowFromPoint даёт неверный результат
Есть WinForms приложение. В основном окне вызывается дочернее вот таким кодом:new...

13
751 / 368 / 133
Регистрация: 01.02.2020
Сообщений: 1,094
Записей в блоге: 1
31.07.2023, 00:55 2
Java
1
2
3
4
5
6
public class Main {
    public static void main(String[] args) {
        var r = 101 / 4.;
        System.out.println(r);//25.25
    }
}
0
0 / 0 / 0
Регистрация: 30.07.2023
Сообщений: 3
31.07.2023, 01:45  [ТС] 3
Это не работает для Android Studio.
0
Эксперт функциональных языков программированияЭксперт С++
4299 / 2156 / 966
Регистрация: 01.06.2021
Сообщений: 7,456
31.07.2023, 23:15 4
Цитата Сообщение от krog1990 Посмотреть сообщение
Кто нибудь знает в чем может быть причина такого неадекватного поведения (Android Studio)
Java
1
float result = 101 / 4; // 25.0
это абсолютно адекватное поведение в языке Java, всё так и должно быть, ибо 101 / 4 это целочисленное деление, остаток просто сбрасывается. Т.е. будто вы изначально пишете float result = 25; а потом просто конвертируете целое число 25 в float и получаете в выводе 25,0.

Чтобы получить то, что вы хотите (25,25), нужно писать:
Java
1
float result = (float) 101 / 4;
или
Java
1
float result = 101 / (float) 4;
или
Java
1
float result = 101f / 4;
или
Java
1
float result = 101 / 4f;
0
103 / 85 / 20
Регистрация: 12.12.2020
Сообщений: 733
31.07.2023, 23:36 5
это даже не именно джава, а особенность самого Си. Результат то у вас float, но делите вы целые числа и результат так же получаете в целых числах, а только потом приводите к float.

Возможно поможет
Java
1
float result = 101.0 / 4.0;
0
Эксперт функциональных языков программированияЭксперт С++
4299 / 2156 / 966
Регистрация: 01.06.2021
Сообщений: 7,456
31.07.2023, 23:44 6
Цитата Сообщение от Alex1126 Посмотреть сообщение
Java
1
float result = 101.0 / 4.0;
выше я написал для ТС аж 4 варианта как правильно делить.

А у вас осуществляется деление двух double, а потом преобразование с потерей в float. А это ошибка error: incompatible types: possible lossy conversion from double to float. Так делать не надо.
Либо придется писать:
Java
1
float result = (float) (101.0 / 4.0);
0
103 / 85 / 20
Регистрация: 12.12.2020
Сообщений: 733
31.07.2023, 23:48 7
Цитата Сообщение от Royal_X Посмотреть сообщение
А у вас осуществляется деление двух double, а потом преобразование с потерей в float. А это ошибка error: incompatible types: possible lossy conversion from double to float. Так делать не надо.
лень было студию запускать, проверить А разве еррор будет? Не варнинг? А, хотя на джаве может и еррор.
0
Эксперт функциональных языков программированияЭксперт С++
4299 / 2156 / 966
Регистрация: 01.06.2021
Сообщений: 7,456
31.07.2023, 23:49 8
Цитата Сообщение от Alex1126 Посмотреть сообщение
лень было студию запускать
мне тоже было лень. Я проверил на https://www.onlinegdb.com/online_java_compiler. Там ошибка.
1
Эксперт .NET
12569 / 8750 / 1311
Регистрация: 21.01.2016
Сообщений: 32,814
03.08.2023, 18:19 9
Цитата Сообщение от Alex1126 Посмотреть сообщение
это даже не именно джава, а особенность самого Си.
Причём тут Си?) Это поведение везде такое. Ты сам верно описал: сначала делятся целые, а потом результат приводится к float.
0
103 / 85 / 20
Регистрация: 12.12.2020
Сообщений: 733
03.08.2023, 18:47 10
Цитата Сообщение от Usaga Посмотреть сообщение
Причём тут Си?) Это поведение везде такое.
ну джава это вроде как наследник Си.
0
Эксперт .NET
12569 / 8750 / 1311
Регистрация: 21.01.2016
Сообщений: 32,814
03.08.2023, 18:49 11
Alex1126, просто потому, что синтаксис похож в некоторых моментах?)
0
Модератор
Эксперт Java
2716 / 1213 / 388
Регистрация: 11.08.2017
Сообщений: 3,747
Записей в блоге: 2
03.08.2023, 21:23 12
Цитата Сообщение от Usaga Посмотреть сообщение
Это поведение везде такое.
Не везде. Знаю си подобный язык где в итоге будет не целочисленное деление
0
Эксперт функциональных языков программированияЭксперт С++
4299 / 2156 / 966
Регистрация: 01.06.2021
Сообщений: 7,456
04.08.2023, 01:43 13
в Python тоже не будет целочисленного деления, а если нужно, чтобы оно было, то для этого есть специальный оператор:
Python
1
2
print(101/4) #25.25 division
print(101//4) #25 integer division
0
Эксперт .NET
12569 / 8750 / 1311
Регистрация: 21.01.2016
Сообщений: 32,814
04.08.2023, 11:49 14
Ну, в JavaScript тоже такого нет. Но исключая эти языки, в остальных - везде)))
0
04.08.2023, 11:49
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.08.2023, 11:49
Помогаю со студенческими работами здесь

Вычисление по формуле даёт неверный результат
#include <math.h> #include <iostream> #include <cstdlib> double ad,bd; float af,bf; using...

Сравнение строк даёт неверный результат
Ткните, пожалуйста, что я делаю не так? Только начал изучать ООП. Как бы я не пытался, но в...

Программа дает неверный результат при вычислениях
Проблема в том, что программа считает неправильно, я считал с калькулятора и по формулам excel, и...

Перемножение десятизначных чисел дает неверный результат
Добрый день ув. форумчане, столкнулся с проблемой, есть число 913, его надо умножить на 8млн....

Почему сравнение double значений дает неверный результат?
Привет друзья ! Есть такая задача. Есть 10 переменных x1, x2, ... , x10 типа double. Нужно...

Команда RCL дает неверный результат. Исправить код
смысл в чем. отве АХ должен получится 2245, а получается 8245 . решаю на калькуляторе косанды. что...

Прога дает неверный результат. ввести строку, вывести ее следующим образом
Вот текст программы: .model tiny .code org 100h start: lea dx,a mov ah,9 int 21h


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru