Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизРасчет Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c