|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.06.2018, 09:50 | #1 |
Пользователь
Регистрация: 28.06.2018
Сообщений: 38
|
Работа с перемменными типа double и float
Доброе утро всем форумчанам (и не форумчанам, короче, всем на свете)! :D Пытался сделать программу, которая считает кол-во чисел после запятой и выводит само число, расположенное после запятой. Проблема в том, что моя программа... как-то неправильно делает эти вещи: например, вводя число 10.1 программа выводит информацию о том, что чисел после запятой 2, а не 1, а результативное число равно почему-то 10, а не 1, хотя в случае 15.6 выводится всё правильно. Вводя 1.1 или 2.6 вывод идёт правильно, но когда вводится число с тремя числами после запятой (например, 1.456), программа выводит одно число после запятой, а само число - 4.56. Такие пироги
P.S.: Си-Аут в циклах я делал для того, что-бы знать, что происходит в циклах и что выводится в результате. P.P.S.: Я сам новичок, если что, ненадо критиковать меня за ошибки. И тапками в меня кидаться не надо Кстати, вот сам код: Код:
Последний раз редактировалось Novy; 28.06.2018 в 09:51. Причина: Опечатка |
28.06.2018, 10:06 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Во-первых, не чисел, а цифр (почитайте, что такое цифры, а что такое числа и чем они отличаются).
а во-вторых, задача может иметь решение ТОЛЬКО если числа вводятся в строковом виде и в этой строке можно подсчитать количество цифр до запятой, после запятой. Всё остальное упирается в машинное представление и погрешность представления чисел в форме с плавающей запятой. ознакомьтесь с теорией. Например, ОЧЕНЬ рекомендую Вам ознакомится со статьёй Неочевидные особенности вещественных чисел (с) Григорьев Антон или на хабре - Что нужно знать про арифметику с плавающей запятой или статья : Алексей Михайличенко с королевства дельфи - Загадки округления p.s. для получения дробной части есть специальные функции. Грубо говоря, чтобы получить дробную часть, нужно отнять от числа его целую часть. Последний раз редактировалось Serge_Bliznykov; 28.06.2018 в 10:09. |
28.06.2018, 13:48 | #3 |
Пользователь
Регистрация: 14.03.2017
Сообщений: 68
|
Код:
Последний раз редактировалось 2Lui; 28.06.2018 в 14:37. Причина: Поправил замечания p51x |
28.06.2018, 13:55 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
1. А если разделитель точка?
2. Лучше сравнивать с npos, а не с -1. 3. Какой смысл вообще сравнивать с -1 после инкремента? |
28.06.2018, 14:33 | #5 | ||
Пользователь
Регистрация: 14.03.2017
Сообщений: 68
|
Цитата:
Цитата:
3.Ошибку исправил. |
||
28.06.2018, 14:41 | #6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
А если Ы? Давайте не выдумывать, есть понятие десятичный разделитель. Он легко определяется по локали или системно.
Можно, до того как npos вдруг решат сделать другой константой. И тогда придется все проги переписывать. +сравнение с npos явно указывает, что проверяется. |
28.06.2018, 14:55 | #7 |
Пользователь
Регистрация: 14.03.2017
Сообщений: 68
|
Код:
Последний раз редактировалось 2Lui; 28.06.2018 в 15:03. Причина: p51x |
28.06.2018, 15:01 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Ну да, студень весь семестр прогулял. Закинул на форум сфотканные задачи - пусть лохи быстренько "напишут правильный код, покажут что да как, да еще построчно прокомментируют". А он пошел по очень важным делам... пиво нагревается... Так?
|
28.06.2018, 15:24 | #9 |
Пользователь
Регистрация: 28.06.2018
Сообщений: 38
|
Во-первых, без капслока можно было донести свою мысль, товарищ модератор, во-вторых, я это как-бы и провернул, я не настолько туп, что-бы делать нахождение чисел после запятой без дробной части, я до этого додумался, в третьих, я не просил писать ваши программы, я просил подправить мою, если что-то не так, в четвёртых, поймите: я не знаю таких вещей, как какие-то ныпосы (чем бы они не были). И вообще, причём тут ссылка на сайт языка Дэльфи, где нет той инфы, которую я ищу? Логика?! Максимально упрощённых объяснений, товарищи, просим... А со строкой я работать не умею.. (если бы умел - я бы не спрашивал про то, как сделать свою задачу) Если кого-то обидел (если уж так вышло) - извиняюсь, но мне нужна помощь. При этом понятная. Ничего особого не требую с вас, я надеюсь
|
28.06.2018, 15:56 | #10 |
Пользователь
Регистрация: 14.03.2017
Сообщений: 68
|
Ну на самом деле силка на сайт делфи там все есть то что вы ищете просто нужно читать а не листать.
Силку на хабр почитайте поймёте может быть. Последний раз редактировалось 2Lui; 28.06.2018 в 16:19. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конвертация single float в double float | kypck | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 23.04.2012 00:22 |
Float и Double | crawter | C# (си шарп) | 1 | 19.03.2012 15:46 |
Ошибка типа cannot convert `float*' to `float' for argument `1' ... | Trackman | Помощь студентам | 3 | 23.05.2011 17:09 |
Отображение значений переменных типа float и double(Языки Pascal и C) | Сырно | Помощь студентам | 3 | 17.10.2010 18:37 |
float или double? | zgest | Общие вопросы C/C++ | 10 | 20.03.2010 15:14 |