![]() |
|
![]() ![]() ![]() |
|
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Господа, мне нужно округлить float до сотых. Именно округлить, а не отбросить числа после запятой. Поэтому printf не предлагать. Пробовал играться с floor и FormatFloat - выходит лажа.
Стал разбираться, что к чему, свел код до
Получаю 1.32455003261566. Что делать и кто виноват? Пишу в Builder XE |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всё правильно. А что вы хотели увидеть? Это "издержки производства" ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Так мне не точность нужна. Мне нужно убрать лишние цифры.
Дано: 1.5453534234324 Хочу: 1.55 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
RoundTo
Из справки:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 3 Всего: 85 |
Надо придумать другую причину, почему не нужно предлагать printf. Потому-что, printf как раз таки округляет, а не отбрасывает. http://liveworkspace.org/code/298ef71bc185...00f5ff1a91ca640 |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Есть еще причина - printf преобразует результат в строку. А мне нужна цифра. Да, я понимаю что можно обратно отконвертировать, тем не менее, хочется писать код рационально и грамотно. А что-то мне подсказывает, что есть простой способ отбрасывать нули не преобразовывая число в строку
Хрен там... выдает 1.24000000023432 Мне кажется что это какая-то глобальная настройка в билдере. Добавлено через 2 минуты и 1 секунду Закину параллельную удочку - а есть ли возможность настройить вормат ячейки в TStringGrid, чтобы она оторажал только округленные до сотых цифры? |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Это float. Вы никогда не получите число вида - 1.24
Рисуйте вручную. тогда и printf подойдёт ;) -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 3 Всего: 85 |
||||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
ладно, я думаю вы поняли что мне нужно. Мне нужно 2 цифры после запятой. Как это сделать - и в интернете есть и здесь мне написали. Да вот только глюк у меня нестандартный - даже принудительно приравняв переменную при ее отображении получается нечто другое. Как это решить?
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 3 Всего: 85 |
=Женек=, еще раз, медленно: float просто физически не может содержать число строго равное двум десятичным числа после запятой. Единственный выход, огруглять при выводе. |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
Я сдаюсь...
Вот строка в которой заполняется ячейка StringGrid
Исходные переменные типа int Ткните пальцем, че сделать то? Это сообщение отредактировал(а) =Женек= - 14.9.2011, 00:19 |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 3 Всего: 85 |
Перевести в текст и вывести.
Добавлено через 2 минуты и 38 секунд Или, как вариант:
|
||||
|
|||||
rodnover |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: нет Всего: 10 |
http://www.softelectro.ru/ieee754.html
Вот статейка по описанию формата двоичных вещественных чисел. Там и погрешности есть и описывается, почему так. Для точных значений лучше использовать специальные классы типа Currency В Delphi или numeric в SQL. В простейшем случае для числа сделать структуру в которой хранить в 2х int целую и вещественную часть. Добавлено через 1 минуту и 6 секунд вот еще хорошая статья http://www.yur.ru/science/computer/IEEE754.htm |
|||
|
||||
=Женек= |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 548 Регистрация: 20.2.2005 Репутация: 1 Всего: 1 |
rodnover, спасибо за статью, познавательно.
volatile, тоже спасибо, все получилось. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |