float

 
Начать новую тему   Ответить на тему    Список форумов Borland X Portal   Главный форум Версия для печати
Предыдущая тема :: Следующая тема  
Автор Сообщение
Александр
Участник
Участник


Зарегистрирован: 01.05.2007
Сообщения: 73

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения: float 
  Добавлено: Вс Фев 21, 2010 0:27
Ответить с цитатой

Как округлить 6,05999994277954 к большему числу

типа:
6,06 (использование сотых, обязательно)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Tantos
Ветеран


Зарегистрирован: 13.10.2004
Сообщения: 1177
Откуда: Хабаровск
Статус: Сейчас на форуме!
Очки: 141
СообщениеЗаголовок сообщения:  
  Добавлено: Вс Фев 21, 2010 7:45
Ответить с цитатой

Если BCB>=6, то FormatFloat. Если нет, поиск по форуму с ключевым словом "округление".

_________________
Чем больше узнаю людей, тем больше люблю компьютеры.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
XPyCT
Участник
Участник


Зарегистрирован: 07.06.2007
Сообщения: 83

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Пт Мар 12, 2010 14:01
Ответить с цитатой

предположим у вас есть переменная float Result = 6,05999994277954;
результат выводим в едит

Код:

Edit1->Text - FloatToStrF(Result,ffFixed,10,2);

2 -Это количество знаков после запятой
результат будет 6,05

пс - Для получения округленного значения переменной Result, надо записать:
Код:

#lnclude <math.h>
.....
floor(Result+0.5);

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day
Новенький
Новенький


Зарегистрирован: 22.01.2009
Сообщения: 5
Откуда: Москва
Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения: Re: float 
  Добавлено: Вс Сен 05, 2010 22:34
Ответить с цитатой

Александр писал(а):
Как округлить 6,05999994277954 к большему числу

типа:
6,06 (использование сотых, обязательно)

Тебе нужно именно до сотых? Тогда существует куча способов, некоторые из которых тебе были показаны.
Но ежели надо остановиться когда встречается несколько девяток...
Тут, пожалуй, ничего умнее не придумать, как вывести число в строку char с максимальной точностью и побайтно анализировать.
Если так, свистни, я когда-то этим занимался.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Zardoz
Завсегдатай
Завсегдатай


Зарегистрирован: 04.08.2005
Сообщения: 537
Откуда: Донецк, Украина
Статус: Сейчас на форуме!
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Пн Сен 06, 2010 20:31
Ответить с цитатой

Да всё это не то, что нужно. Не надо из числа делать строку и еще как-то анализировать там... А если не дай Бог еще и много операций делать с этими "числами-строками" - жуть...
Делаем проще - передвигаем запятую вправо на нужное кол-во знаков, затем округляем и потом возвращаем запятую (x-аргумент, y-результат):
Код:

y=floor(0.5+x*100)/100; - округление до 2-го знака
y=floor(0.5+x*1000)/1000; - округление до 3-го знака
y=floor(0.5+x*10000)/10000; - округление до 4-го знака
...
y=floor(0.5+x*pow(10,N))/pow(10,N); - округление до заданного N-го знака


Можно оформить в виде функции, если в самом деле нет готовой (сам пользуюсь Дельфи), множитель 100, 1000, .. и т.д. задается степенью N числа 10 и т.о. получим функцию округления в виде одной строчки с заданным N (последння строка с показателем степени N).

С уважением.
P.S. Для отрицательных чисел x, возможно следует перед 0.5 поставить "-" (можно знаковой функцией)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day
Новенький
Новенький


Зарегистрирован: 22.01.2009
Сообщения: 5
Откуда: Москва
Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Вт Сен 07, 2010 19:09
Ответить с цитатой

Zardoz, Если кол-во знаков известно, тут вообще проблем нет.
Способов - море, твой - один из них.
У меня-то была другая проблемка нужно было ОПРЕДЕЛИТЬ количество
знаков.
Т.е. округлять так:
1.20023 = 1.2
1.234009945 = 1.234
1.299657 = 1.3
1.0909129908 = 1.090913

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Zardoz
Завсегдатай
Завсегдатай


Зарегистрирован: 04.08.2005
Сообщения: 537
Откуда: Донецк, Украина
Статус: Сейчас на форуме!
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Вт Сен 07, 2010 20:44
Ответить с цитатой

day.
Мой способ (на самом деле и не мой), это НЕ "один из них", а классический. Менее распространено округление по Гауссу.
И что значит число знаков неизвестно? Округление как раз и выполняется по заданному числу знаков.

А выполни округление (или число знаков), по своему способу дроби 13/7. Что у тебя получится?

С уважением.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
day
Новенький
Новенький


Зарегистрирован: 22.01.2009
Сообщения: 5
Откуда: Москва
Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Вчера в 12:10
Ответить с цитатой

Zardoz, это просто разные задачи. Моя возникла как попытка скорректировать накапливающиеся погрешности вычислений на компутере. Представь, юзер считает столбиком и получает 1.23,
а я ему - 1.22999.
Мы-то с тобой все понимаем, а вот юзеру не объяснишь, и он по своему прав.
Что касается 13/7, то конечно, максимальное кол-во знаков должно быть задано.
Кстати, вот еще симпатичная задачка, представить дроби типа
этой как в школе велят, т.е. 13/7 = 1.(857142)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Nuzhny
Модератор
Модератор


Зарегистрирован: 23.02.2004
Сообщения: 2339
Откуда: Ставрополь
Статус: Сейчас на форуме!
Очки: 1010
СообщениеЗаголовок сообщения:  
  Добавлено: Вчера в 16:48
Ответить с цитатой

Различные мат. пакеты (Matlab, Maple, Mathcad) могут использовать внутри себя символьные вычисления, поэтому у них проблем с округлением (а по сути с преобразованием в двоичный формат и обратно) вообще не бывает. Аналогично и с финансовыми вычислениями - только символьное представление чисел.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Borland X Portal   Главный форум Часовой пояс: GMT +3:00
Страница 1 из 1
Перейти:  

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах




Rambler's Top100
Rambler's Top100
[ Страница создана за 0.188816 секунд ] :: [ Произведено 22 запросов ] :: [ GZIP compression enabled ]