Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

Расчет   Найти похожие ветки 

 
Andy Eremin   (2003-01-21 11:59) [0]

При расчете ячеек (AsFloat) с результатом, близким к целому, в ячейку записывается число, близкое к целому, т.е. вместо 1 пишет 0.999999999999
Как избавиться от такой напасти?


 
Mike Kouzmine   (2003-01-21 12:05) [1]

Округлять или установить DisplayFormat поля или использовать BCD


 
Johnmen   (2003-01-21 12:06) [2]

Каких таких ячеек ?!
Может быть достаточно определить формат отображения ?


 
Andy Eremin   (2003-01-21 12:12) [3]

Вот именно, что отображает все нормально, а фактически в ячеку помещается совсем другое, т.е.
я пишу: 2.3-2=
В ячейку записывает 0.9999999999!!!!
А отображает 1.0


 
Johnmen   (2003-01-21 12:20) [4]

Не бери в голову... Погрешности разрядной сетки...


 
Andy Eremin   (2003-01-21 13:05) [5]

2 Johnmen
Дык проблема.
Вот случай: расчитываю ячейки 2,3-2,3
Получается -2,66453525910038e-15
А у меня на отрицательные значения - своя метода
Но не меньше нуля результат. Ладно бы он округлял в плюс.


 
gsu   (2003-01-21 13:13) [6]

где пишет ?


 
Johnmen   (2003-01-21 13:13) [7]

Придется тогда самому округлять...:)


 
Andy Eremin   (2003-01-21 15:59) [8]

2 Johnmen
Именно так я и поступил.
Только у меня вопрос: чем отличается int от round и что конкретно применять в данном случае?


 
Johnmen   (2003-01-21 16:15) [9]

В данном случае - округление (round и т.п.).
int - целая часть.


 
Chubais   (2003-01-21 18:35) [10]

Andy Eremin © (21.01.03 13:05)
ты бы почитал, что такое вообще вещественные числа.... и как они представляются в памяти....
тогда для тебя это не было бы удивлением


 
MsGuns   (2003-01-21 18:39) [11]

Я, к примеру, ВСЕГДА при вычислениях округляю:

a := Round(<выражение>*10^N)/10^N,

где N - требуемая значность дроби (для денег обычно 2, для скл.остатков может быть до 6)

Погрешностей суммарных даже на объемах в десятки тыщ записей практически не бывает.


 
Anatoly Podgoretsky   (2003-01-21 18:59) [12]

MsGuns © (21.01.03 18:39)
Но это тебе не поможет, с учетом особенностей с плавающей запятой, попробуй например округлить 0,02 до двух знаков после запятой, для упрощения возьми тип Single, что бы не рассматривать результат отладчиком. Для других типов суть не изменится, будет меняться только точность, но никогда не будет 0,02000000000000000.


 
MsGuns   (2003-01-21 19:22) [13]

>Anatoly Podgoretsky © (21.01.03 18:59)

Тут на одном числе и пробовать нечего. А вот ты попробуй просуммировать итог по 100 (этого будет достаточно) записям, в которых <Сумма> определяется как <Цена>*<Количество> с и без округления, а потом проверь на калькуляторе, складывая "денежные" результаты (т.е.реальные суммы без долей копеек) - вот там и видно будет разницу !


 
Andy Eremin   (2003-01-22 07:44) [14]

Совершенно согласен с MsGuns. Предложенным его методом я и пользовался, только вместо Round пользовался Int.
Не знаю, почему я так делал, но за это жестоко поплатился 8-)).
Потерял вот почему вместо 1 в ячейке значилось 0.99999999999



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
3-15423
herosofnn
2003-01-22 08:49
2003.02.06
вычисляемое поле


4-15992
markers
2002-12-24 13:43
2003.02.06
Как вставить иконку левого приложения имея от него только caption


9-15381
Nafander
2002-08-20 08:38
2003.02.06
Уничтожение объекта в GLScene


1-15698
LongIsland
2003-01-27 16:23
2003.02.06
OnResize и OnDestroy


1-15624
Smok_er
2003-01-23 21:45
2003.02.06
И снова MDI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский