С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
 Аватар для madcat600
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 33

Поясните пожалуйста код

13.10.2015, 17:30. Показов 641. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо вывести числа в заданном диапазоне с шагом в 0.01.

Java
1
2
3
4
        for (float x = 0; x > -0.15 ; x -= 0.01)
        {
            System.out.println(x);
        }
на выводе имеем:

0.0
-0.01
-0.02
-0.03
-0.04
-0.05
-0.060000002
-0.07
-0.08
-0.089999996
-0.099999994
-0.10999999
-0.11999999

-0.13
-0.14


Отсюда два вопроса - почему получаются "не стандартные" числа? и как получить стандартные?

ЗЫ я осознаю, что наверное спросил совсем уж "очевидную очевидность", но где копать я так и не понял.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2015, 17:30
Ответы с готовыми решениями:

Не срабатывает сеттер, поясните, пожалуйста
import javafx.application.Application; import javafx.geometry.*; import javafx.geometry.Insets; import javafx.scene.Scene; import...

Поясните код
Здравствуйте. У меня есть программа. Мне нужно ее разъяснить преподавателю, но я ее не сам писал. Поясните пожалуйста поподробнее, что тут...

Поясните код новичку
static { //@@begin id String id = "$Id$"; //@@end ...

11
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
13.10.2015, 17:48
Java
1
System.out.printf("%.2f\n", x);
1
 Аватар для madcat600
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 33
13.10.2015, 17:52  [ТС]
угу. благодарствую. а в чём, собственно дело получается? в явном преобразовании?
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
13.10.2015, 18:02
Цитата Сообщение от madcat600 Посмотреть сообщение
"не стандартные" числа?
Думаю это как-то связано с точностью вычисления, с архитектурой так сказать.
Нашел в интернете такое объяснение:
Вкратце суть в том что поскольку дробные числа представляются не десятичными а двоичными дробями, то не всегда возможно выразить нужное десятичное число конечной двоичной дробью. А количество байт под число отводимых вполне конечно.
А при использовании printf мы выводим данные числа в заданном формате, 2 цифры после запятой.

Форматированный вывод можно сделать еще так:
Java
1
System.out.format("%.2f\n", x);
или так:
Java
1
System.out.println(String.format("%.2f", x));
1
 Аватар для madcat600
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 33
13.10.2015, 18:04  [ТС]
ага. уже яснее.
а если нам этот Х нужен будет для вычислений?
Если есть какой-то Y к которому надо добавлять Х. то на рандомной итерации будет добавляться не стандартное число? или в таких случаях надо как-то по-другому выстраивать код?
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
13.10.2015, 18:13
Используйте double. Думаю двойной точности вам точно хватит.
Вычисляйте спокойно, а при выводе используйте форматированный вывод.
0
 Аватар для madcat600
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 33
13.10.2015, 18:17  [ТС]
я понял. спасибо большое, ildwine.
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
13.10.2015, 18:18
Как вариант, покопать в сторону класса BigDecimal:
Java
1
2
3
BigDecimal x = new BigDecimal("45.457");
x = x.setScale(2, BigDecimal.ROUND_HALF_UP); /* 2 - количество знаков после запятой */
System.out.println("x = " + x.doubleValue());
результат: 45,46
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.10.2015, 18:31
BigDecimal - это по сути String;

Класс набора СВОИХ методов сложения, модуля, отнимания, произведения, деления и т.д. Но числа представленны в виде обычной строки
0
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
13.10.2015, 19:23
ArtemFM, ну да, только скорее построен на массивах символов, нежели на строках.
Стандартное решение для задач длинной арифметики...

Не по теме:

В данном случае интересно для более точного представления дробных чисел. В бухгалтерии вот рекомендуют отказаться от double вообще, ибо не получится "свестись" по балансу.

0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.10.2015, 19:27
Ну да, я на подобии писал....сложение столбиком, умножение столбиком...с последнего начиная символа складываешь, а остаток переносишь.... Зато нет ограничений в длине числа....практически
0
13.10.2015, 19:35

Не по теме:

ArtemFM, для тех кто занимался тем же паскалем (и прочими языками без встроенной длинной арифметики) - вообще красота классы, типа BigInteger (который наследник BigDecimal). Всякие там факториалы писать в тех языках надо было руками, на массивах, а тут решение с коробки :D

Ладно всё... хватит оффтопить:jokingly:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2015, 19:35
Помогаю со студенческими работами здесь

Поясните пожалуйста строки
источник интерфейс генератора public interface Generator { Object next(); } класс c методом для наполнения массива

Поясните пожалуйста код
Код принимает число и возвращает его английское название. поясните пожалуйста выделенное красным. def englishNumber number if...

Поясните пожалуйста код
Здравствуйте. Завтра нужно сдавать программу, а выяснилось что мне нужно знать что означает каждая строка следующего кода: function...

поясните пожалуйста код
#include <iostream.h> #include <fstream.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <iomanip.h> ...

Поясните пожалуйста код . . .
я делаю базу данных о загрязнении воздушной среды. . . Всю основу я сделала. . .но не понимаю . . у меня есть задание вывести учет...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru