Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2015, 11:58   #1
FreddyZSX
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 10
По умолчанию StrToFloat некоректно преобразует

Здравствуйте!

в окне получаю текст 99.7
ставлю
tmpReal:=StrToFloat('99.7')
получаю tmpReal=99.6999

ставлю
tmpReal:=StrToFloat('579.7')
получаю tmpReal=579.70001221

как бороться с этим?
Надо бы чтобы tmpReal=99.7 или tmpReal=579.7 - как вводили в окне...
FreddyZSX вне форума Ответить с цитированием
Старый 19.04.2015, 12:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Все он корректно переводит. Ни 99.7, ни 579.7 никогда точно не преобразуется в двоичное вещественное. Для чего это нужно и почему в разделе SQL?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2015, 12:19   #3
FreddyZSX
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 10
По умолчанию

и как же бороться, чтобы обеспечить точность ввода и преобразования?..
FreddyZSX вне форума Ответить с цитированием
Старый 19.04.2015, 12:23   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

То, что получаешь - 99.6999 и 579.70001221 это опять же строковое представление того двоичного вещественного. Как получаешь?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2015, 12:29   #5
FreddyZSX
Пользователь
 
Регистрация: 26.02.2015
Сообщений: 10
По умолчанию

Код:
  GLB_rLength:=StrToFloat(ed_Length_Quality.Text);
Далее GLB_rLength заношу в БД в поле типа float. Атам именно 99.6999 и 579.70001221!!! А это не годится....
FreddyZSX вне форума Ответить с цитированием
Старый 19.04.2015, 12:34   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
поле типа float
сделай, например, DECIMAL(12,2) или NUMERIC(12,2). Чего там СУБД позволяет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2015, 16:09   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Пропусти через функцию RoundTo с параметром округления до 1 знака после запятой. Получишь, то что надо.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 20.04.2015, 08:13   #8
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

а что ed_Length_Quality за компонент? TEdit?
лучше взять, например, TJvSpinEdit или какой другой компонент поддерживающий вещественные числа
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некоректно работает запрос MySQL SeRhy SQL, базы данных 2 23.12.2014 12:41
Некоректно работает многопоточность UKRtortik Общие вопросы Delphi 26 15.05.2014 13:16
StrToFloat romanzi Общие вопросы Delphi 5 27.09.2013 19:59
некоректно работает скрипт опроса на сайте logstar PHP 4 06.02.2011 17:31
StrToFloat nporaMep Общие вопросы Delphi 2 15.12.2006 07:42