#java #rounding
Вопрос:
В принципе, я должен написать метод, который использует двойное «x» и int «y» и округляет (gt;=5 вверх, gt; Предполагается, что метод возвращает двойное значение. Однако с тех пор, как я только начал, я понятия не имею, как этого добиться. Упражнение, предшествующее этому, в одну сторону проще.
Если прочитать ответы на аналогичный вопрос, но они не совсем то, что мне нужно, потому что я не могу использовать математическую библиотеку или другие библиотеки. Мне разрешено использовать вспомогательные методы, чтобы заменить это.
Комментарии:
1. На каком языке?
2. Java, Eclipse в качестве IDE
Ответ №1:
Такое округление с удвоением не сработает. Двойные и плавающие числа представлены фиксированным числом битов данных и работают в двоичном, а не десятичном формате. Это означает, что некоторые числа не могут быть представлены. .1 не может быть сохранен точно.
Для этого вам нужно использовать BigDecimal, который является классом, который может хранить любое точное число. Математика с использованием BigDecimal менее эффективна, но у нее нет проблем с точностью двойников.
Комментарии:
1. Я заметил, что использование BigDecimal требует импорта. Который мне тоже не разрешается использовать.
2. Тогда то, о чем просит ваш учитель, буквально невозможно в рамках языка, или вы неправильно понимаете задание.
3. Поскольку это школьное задание — преобразуйте двойник в строку, затем возьмите подстроку нужного размера, округлите ее соответствующим образом на основе следующего символа (что может потребовать от вас изменить несколько чисел, если оно изменяется с 9 на 0), все еще используя символы для каждой цифры, затем преобразуйте обратно в двойник. Но помните, что если бы вы когда-нибудь сделали это в реальном мире, вы бы немедленно отклонили проверку кода, это ужасный код.
4. Да, это именно то, что я сказал, невозможно на Java. Вы не можете иметь 2,984 в качестве двойного. это будет выглядеть как 2.9839879989898 или что-то в этом роде. двойники не работают в базе 10
5. Я предполагаю, что тот, кто это разработал, не понимает, что такое плавающая точка, и что возможность округлить 1,22 до ближайшего числа 1,20, вероятно, достаточно хороша, даже если это не совсем правильно.