Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 06.07.2017, 10:16   #1
dima_reg
 
Регистрация: 28.01.2013
Сообщений: 6
Репутация: 10
По умолчанию не понятная точность 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, 10:27   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 390
Репутация: 85
По умолчанию

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

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

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, 13:08   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,354
Репутация: 5274
По умолчанию

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

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

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

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

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

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

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

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


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

skype: raw_2_raw
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не понятная ошибка kkep Microsoft Office Access 11 01.09.2016 16: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 18:19
не понятная ошибка ManInBlack Помощь студентам 2 20.10.2008 23:33


14:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru