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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2017, 09:16   #1
dima_reg
 
Регистрация: 28.01.2013
Сообщений: 6
По умолчанию не понятная точность TFloatField

связка delphi + ado + msaccess
выражение:
MaterialKol.Value:=MaterialKol.Valu e+(Znak*DetRashKol.Value);

значение перед выражением:
MaterialKol.Value = 9.3
Znak=-1
DetRashKol.Value=10.25

после расчета
9,3+(-1*10,25) должно быть -0,95
а у меня получается -0,949999999999999
dima_reg вне форума Ответить с цитированием
Старый 06.07.2017, 09:27   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

http://www.programmersforum.ru/showthread.php?t=38130

Последний раз редактировалось Cuprum5; 06.07.2017 в 09:41.
Cuprum5 вне форума Ответить с цитированием
Старый 06.07.2017, 12:03   #3
dima_reg
 
Регистрация: 28.01.2013
Сообщений: 6
По умолчанию

MaterialKol.Value и DetRashKol.Value : TFloatField
т.е. тип double
поля

Сделал так:
var znak,z1,z2: double;

в программе:
z1:=MaterialKol.Value;
z2:=DetRashKol.Value;
z1:=z1+znak*z2;
MaterialKol.Value:=z1;

в этом месте в отладчике смотрим значения:
MaterialKol.Value = -0.95
а вот
MaterialKol.asString = '-0,949999999999999'

после окончания расчета в access смотрю:-0,949999999999999
dima_reg вне форума Ответить с цитированием
Старый 06.07.2017, 12:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от dima_reg Посмотреть сообщение
т.е. тип double
1) вместо double используйте тип Extended
если не поможет, тогда
2) погуглите, что такое погрешности машинного представления вещественных чисел в памяти ЭВМ. Просто используйте округление (например, до 6 знака после запятой и будет Вам "счастье" )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.07.2017, 12:13   #5
dima_reg
 
Регистрация: 28.01.2013
Сообщений: 6
По умолчанию

или может всё к extended привести?

Serge_Bliznykov быстрее меня печатает.
как удалить ответ - не знаю.

Последний раз редактировалось dima_reg; 06.07.2017 в 12:41.
dima_reg вне форума Ответить с цитированием
Старый 06.07.2017, 12:19   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Сделай, допустим, в таблице поле двойное с плавающей точкой и фиксированным форматом и нужным количеством знаков после десятичного разделителя. Провайдер сам позаботится об округлении и отбрасывании лишнего. Только не помню какой там тип поля ado вернет в делфи, возможно TBCDField, а может и TFloatField останется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.07.2017 в 12:23.
Аватар вне форума Ответить с цитированием
Старый 06.07.2017, 12:36   #7
dima_reg
 
Регистрация: 28.01.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сделай, допустим, в таблице поле двойное с плавающей точкой и фиксированным форматом и нужным количеством знаков после десятичного разделителя. Провайдер сам позаботится об округлении и отбрасывании лишнего. Только не помню какой там тип поля ado вернет в делфи, возможно TBCDField, а может и TFloatField останется
сделал округление.
Просто ситуация реально не понятная. В таблице 2000 записей. и только 2 из них работают с такими траблами. Со всеми остальными - всё ОК.
Придется помнить и постоянно округлять принудительно.
dima_reg вне форума Ответить с цитированием
Старый 06.07.2017, 13:26   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от dima_reg Посмотреть сообщение
Просто ситуация реально не понятная.
сходите по ссылочкам, которые я давал ТУТ
станет чуть-чуть понятнее.


Цитата:
Сообщение от dima_reg Посмотреть сообщение
В таблице 2000 записей. и только 2 из них работают с такими траблами
это просто дело случая. Если бы не эти две записи, так Вы про данную проблему и не узнали!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2017, 12:17   #9
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Сообщений: 109
По умолчанию

Почитайте книжку "О чём не пишут в книга по Delphi" Антона Григорьева, там всё есть.
dummy_user вне форума Ответить с цитированием
Старый 11.10.2017, 12:46   #10
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Используйте денежный формат и будет вам счастье...
kropotkina-alice вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не понятная ошибка kkep Microsoft Office Access 11 01.09.2016 15:53
не понятная кодировка skotsaga PHP 4 08.01.2012 21:15
не понятная фигн TotKtoNado Общие вопросы Delphi 0 01.07.2011 17:25
Не понятная задача mitax Microsoft Office Excel 2 17.12.2010 17:19
не понятная ошибка ManInBlack Помощь студентам 2 20.10.2008 23:33