Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
19 Июль 2025, 12:28:10
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

чё за фигня в FloatToStr

Страниц  :   Вниз
  Печать  
Автор Тема: чё за фигня в FloatToStr  (Прочитано 1667 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ruslan2007
Гродненец
**

Репутация: +13/-0
Offline Offline

Предупреждения: readonly на несколько суток
Пол: Мужской
Сообщений: 155


7 бед один reset

S Просмотр профиля Email
« : 17 Март 2008, 19:42:21 »

После ваыполнения операции

procedure TForm1.Button1Click(Sender: TObject);
var
  a: real;
begin
    a:=0.4;
    Edit3.Text:= FloatToStr(a-0.4);
end;

Значение в edit = 2,21990394816407E-17 Шокирован
Записан
Demik
Ты бЛондинКо - йА админ, Тибя много - йА адзын . Ты на кАпсЕ - я пАцтуЛом, щОлкну мышкой +1 :)
Кандидат в депутаты
****

Репутация: +703/-18
Offline Offline

Пол: Мужской
Сообщений: 3492


В России 2 беды,причем 1я постоянно ремонтирует 2ю

Просмотр профиля
« Ответ #1 : 17 Март 2008, 20:56:57 »

ну а че ты удивляешься? Есть же система экспоненциальная! Жаль что давно делфи не загружал, так не вспомню как в метрическую перевести!
Кстати, многое зависит от конкретного компилитора, лучше сложение-вычитание сделай отдельно!
Записан

VP
Гродненец
**

Репутация: +4/-0
Offline Offline

Сообщений: 84


Я люблю Гродненский форум!

Просмотр профиля Email
« Ответ #2 : 18 Март 2008, 10:25:06 »

Стандартная проблема вычислений с плавающей запятой.
10 раз сложив 0.1 ты не получишь 1.0

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

То что ты получил это в принципе 0 (E в -17 степени)
Записан
Ruslan2007
Гродненец
**

Репутация: +13/-0
Offline Offline

Предупреждения: readonly на несколько суток
Пол: Мужской
Сообщений: 155


7 бед один reset

S Просмотр профиля Email
« Ответ #3 : 18 Март 2008, 19:13:03 »

Цитировать
При сравнении чисел с плавающей запятой всегда указывай точность, до какого знака после зпт результат является верным.
А как эт сделать, и как в FloatToStr указать, скока выводить знаков после запятой. Обеспокоенный
Записан
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #4 : 19 Март 2008, 15:29:41 »

Тебе нужно использовать совместно с FloatToStr структуру  FormatSettings : TFormatSettings
в этой структуре указывается форматирование строки (региональные настройки)
э.з.
сначала создаешь переменную типа TFormatSettings
заполняешь нужные поля и вызываешь FloatToStr(FloatVar, FormatVar), где FloatVar - переменная которую нужно вывести в виде страки
FormatVar - форматирование
посмотреть подробнее можно сдесь:
http://delphibasics.ru/FloatToStr.php
и сдесь
http://delphibasics.ru/TFormatSettings.php
либо функцию Format (более универсальная функция, но придется покапаться в справочниках по C)
http://delphibasics.ru/Format.php
Учитывай, что в англоязычной винде в качестве разделителя используется ".", а в русскоязычной ",", если это не учесть можно нажить много гемороя (при использовании функции StrToFloat, к примеру)
« Последнее редактирование: 19 Март 2008, 15:34:31 от coolasm » Записан

HTTP Error 404 - File or directory not found.
Demik
Ты бЛондинКо - йА админ, Тибя много - йА адзын . Ты на кАпсЕ - я пАцтуЛом, щОлкну мышкой +1 :)
Кандидат в депутаты
****

Репутация: +703/-18
Offline Offline

Пол: Мужской
Сообщений: 3492


В России 2 беды,причем 1я постоянно ремонтирует 2ю

Просмотр профиля
« Ответ #5 : 19 Март 2008, 20:27:06 »

coolasm прав, а этот самый разделитель зависит от регионарных настроек, точно так же как и разделитель даты "." или "/".
Записан

SVSH
Гигафлэймер
*****

Репутация: +3240/-9
Offline Offline

Пол: Мужской
Сообщений: 26625


(OO\ (|||)°(|||) /OO)

Просмотр профиля
« Ответ #6 : 23 Март 2008, 11:54:06 »

Самый простой способ - FloatToStrF({само число}, ffGeneral, {количество цифр после запятой}, 0)
Записан
Ruslan2007
Гродненец
**

Репутация: +13/-0
Offline Offline

Предупреждения: readonly на несколько суток
Пол: Мужской
Сообщений: 155


7 бед один reset

S Просмотр профиля Email
« Ответ #7 : 23 Март 2008, 16:33:10 »

Цитировать
Самый простой способ - FloatToStrF({само число}, ffGeneral, {количество цифр после запятой}, 0)
Я так и сделал
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,1 секунд. Запросов: 20.