Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Yumi_Mills
0 / 0 / 0
Регистрация: 05.11.2016
Сообщений: 31
#1

Вычисления с чисел с плавающей запятой - Delphi

19.03.2017, 02:13. Просмотров 276. Ответов 6
Метки нет (Все метки)

Есть в БД поле с числом (например 0,12).
Формат в БД: Одинарное с плавающей точкой, Основной, 2 цифры после запятой.

Нужно умножить его на другое число, введённое в делфи.
Почему выводится слишком много цифр после запятой?
Например на обычном калькуляторе 10*0,12=1,2. А в Делфи этот же пример равен 1,19999997317791.
Можно ли сделать так, что были "нормальные" числа, как в обычном калькуляторе?

Пробовала функцию FloatToStrF:
Delphi
1
Edit9.Text:=FloatToStrF(StrToFloat(Edit7.Text)*ADOQuery1wPrice.AsFloat, ffNumber, 10, 2);
Выводит она вычисление в эдит корректно, однако при сохранении этого числа из эдита обратно в БД вызывает ошибку (скрин).
Код записи числа в БД:
Delphi
1
ADOQuery2Amount.AsVariant:=Edit9.Text;
Если сделать так:
Delphi
1
ADOQuery2Amount.AsVariant:=StrToFloat(Edit9.Text);
То ошибки нет, но записывается число с множеством знаков.
0
Миниатюры
Вычисления с чисел с плавающей запятой  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2017, 02:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вычисления с чисел с плавающей запятой (Delphi):

Округление чисел с плавающей запятой
Здравствуйте товарищи программисты. Есть вопрос по функции FloatToStrF. Для...

Аномальное поведение чисел с плавающей запятой
Здравствуйте форумчане сегодня я столкнулся с проблемой в вычислениях что я под...

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

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

Числа с плавающей запятой
Всем привет! как сравнивать числа с плавающей запятой? var c : real; begin...

Как сравнить два числа с плавающей запятой?
Хотел сделать проверку обновления в программе используя Synapse. Но при...

6
northener
пофигист широкого профиля
3252 / 2304 / 628
Регистрация: 15.07.2013
Сообщений: 13,599
19.03.2017, 02:18 #2
Цитата Сообщение от Yumi_Mills Посмотреть сообщение
Пробовала функцию FloatToStrF:
Правильно пробовали. При переводе вещественного числа в его строковое представление - это как раз самое то, что вам нужно.
0
Yumi_Mills
0 / 0 / 0
Регистрация: 05.11.2016
Сообщений: 31
19.03.2017, 02:26  [ТС] #3
Цитата Сообщение от northener Посмотреть сообщение
Правильно пробовали
Но ведь оно работает не так, как мне нужно.

Пробовала так записывать число:
Delphi
1
ADOQuery2Amount.AsString:=FloatToStrF(StrToFloat(Edit9.Text), ffNumber, 10, 2);
Но выдаёт ошибку. И при ffGeneral -- ошибка.
А при ffFixed записывает длинное число 1,19999997317791.
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,263
Записей в блоге: 13
19.03.2017, 05:46 #4
все действия с вещественными числами - приблизительные.
происходит это из-за особенностей хранения этих чисел в компьютере
если вы 1000 раз сложите 0.001 то у вас не получится 1.
это неизбежно (((
чаще всего вам нужно пользоваться округлением при выводе на экран
http://delphi-box.ru/roundto-simpleroundto-delphi.html
а для присваивания значений полей использовать
AsFloat
0
Yumi_Mills
0 / 0 / 0
Регистрация: 05.11.2016
Сообщений: 31
19.03.2017, 17:16  [ТС] #5
А не подскажите, куда прописать округление, чтоб "корректные" числа выводились в таблице?
0
Миниатюры
Вычисления с чисел с плавающей запятой  
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,263
Записей в блоге: 13
19.03.2017, 17:52 #6
Лучший ответ Сообщение было отмечено Yumi_Mills как решение

Решение

ПКМ на вашем Table, Query или что там у вас, Field Editor -- Add All Fields
у каждого поля заполните свойство Format
1
Yumi_Mills
0 / 0 / 0
Регистрация: 05.11.2016
Сообщений: 31
19.03.2017, 18:26  [ТС] #7
Огромное спасибо.
0
19.03.2017, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2017, 18:26
Привет! Вот еще темы с решениями:

Переполнение знаков плавающей запятой (или как-то так)
Доброго времени суток:) Можно ли сделать так, чтобы "с" считалось до...

Перевод из строки в число с плавающей запятой
У меня на форме присутствует StringGrid в нем в последней ячейке в каждой...

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

Создание многопоточного приложения, для вычисления числа «пи» с максимальной точностью после запятой.
Доброго всем времени суток! Пишу по методичке программу для вычисления числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru