Оператор %, глюк | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Детектировал суммы с дробными копейками оператором % 0.01, и выяснилось:
В фокс встроен какой-то ИИ по автоматическому округлению там, "где надо", но что-то тут не сработало... или делить можно только на целые числа... Доб. Оказалось, проблема в ф-ии EMPTY. Она не обладает ИИ по округлению:
Исправлено 1 раз(а). Последнее : of63, 14.09.17 17:53 |
Re: Оператор %, глюк | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да. Т.к. 90% начинающих программистов (вообще, ну и 90% любых программистов на фоксе - даже с 10+ летним стажем) не понимают логику работы машинной арифметики для "вещественных" типов данных. В частности особенности операций "точного сравнения" машинного числа с десятичной константой в коде. Не имеет значения на что делить/умножать или как брать остаток. Имеет значение то, что вещественные числа в машинном представлении очень часто НЕ совпадают с той десятичной записью, при помощи которой они инициализированы (запись литерала в коде программы, к примеру). Твой пример как раз из этой области. Запись в коде 942.80 превращается в машинное число НЕ являющееся точным десятичным значением 942.80 P.S. Не очень понимаю для чего нужны "дробные копейки", но в общем для работы с деньгами следует применять либо обычные целые числа (увы, это не возможно в фоксе, т.к. ты не можешь управлять тем, какой именно тип использует среда для хранения переменной - точнее она может спокойно "перевести" целое число в вещественное, и в итоге "потерять копейку"), либо специальные денежные типы - currency в фоксе. ------------------ WBR, Igor |
Re: Оператор %, глюк | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Суммы взяты не из БД фокса, а из экселя. Уже при приеме а переменную s = .Cells(i,j).Value возникают "неоднозначности". Даже "целое" число (когда ячейка сформатирована как число) возвращает не совсем целое число... Задача была - отличить колонку с суммами (числа без дробных копеек, т.е. <=2 знака после запятой), от колонки с числами >2 знака после запятой, и заодно найти колонку с целыми числами... Ну, такой "ИИ" по анализу содержимого файла Эксель, чтобы приемник не принимал явно не те строки, а только заданные метаформатом типа: "сумма, ФИО, таб.номер, ...".
|
Re: Оператор %, глюк | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Когда в экселе ячейка имеет формат "числа", то там ЯВНО задаётся число знаков после запятой. Т.к. хранится в поле может, к примеру, число 1.111111111 а заданный формат ячейки приведёт к тому что ВИДИМО пользователю будет 1.11 - так что само "значение", тем более что оно может быть и результатом расчёта по формуле, вынимать я бы не спешил (для анализа).
Впрочем я большой пессимист по поводу всякого рода ИИ, "угадывающего" в какой колонке ФИО, в какой возраст а в какой причитающаяся к уплате сумма Надёжнее показать юзеру (превью данных, скажем так) и пускай сам тыкает А там уже явными округлениями/отсечениями приводить числа в требуемый вид. ------------------ WBR, Igor |
Re: Оператор %, глюк | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Когда в экселе ячейка имеет формат "числа", то там ЯВНО задаётся число знаков после запятой.
формат я не читаю (часто указан неадекватный, или общий), а читаю только .Value ячейки, из него и строю предположения о том, что там лежит... Для этого есть анализатор текста, который угадывает по тексту его "предполагаемый" тип (грубо "если все цифры то это число", или "все цифры, но цифр много - это не число", или "все цифры, и контрольная сумма, как для ИНН, говорит что это ИНН") По поводу пессимизма про автоопределение назначения колонки - удобно бывает все-таки предугадать хоть что-то, а потом уже предлагать дотыкать непонятное на листе эксель (и то, я не пробовал ловить события на листе эксель и передавать их в фокс...). В 99% случаев ловит как надо, и это очень удобно. ФИО отличить от неФИО просто, также ИНН, СНИЛС, паспорт... Основная проблема, даже при знании назначения колонок, найти начало блока с данными, конец блока, найти прогалы в данных (пустые и полупустые строки), а для этого и приходится отличать ФИО от "ИТОГО", или заголовка колонки. Да заголовок колонки тоже хорошо бы находить (обычно это текст на 1 выше блока данных). |
Re: Оператор %, глюк | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Я не имел в виду в экселе тыкать - забрать данные в фокс (например первые 10 строк), и там уже показав пользователю решать что за оно. Конечно же это не позволит вынимать данные из совершенно произвольного листа - где, к примеру, первые 100500 строк пустые, а потом уже пойдут данные - да ещё и "1 заполненная строка через 10 пустых"
P.S. Бог миловал от разгребания такого дерьма P.P.S. А Итого неплохая фамилия ------------------ WBR, Igor Исправлено 1 раз(а). Последнее : Igor Korolyov, 12.09.17 18:29 |
Re: Оператор %, глюк | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Больше всех получает
|
© 2000-2024 Fox Club  |