|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Dima TЗапустить религия не позволила? vartype(x) вернет тип LOGICAL т.к. всем переменным объявленным в LOCAL присваивается .F., потому что написанное после AS игнорируется при выполнении.для неинициализированных переменых объявленный тип и впрямь не имеет значения. Пока они не инициализированы. А теперь запишите туда раунд(5,233648б2) и покажите вартайп. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 07:35 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Pavel09, запустил, есть погрешность. Похоже на точность влияет не только кол-во знаков после запятой, но и изначальное общее количество знаков. Как выше писал ROUND() лечит проблему: Код: plaintext
Не знаю что твои числа означают, но если это деньги или что-то подобное по размерности, то подумай над использованием типа CURRENCY. Его придумали именно для тех случаев где даже малая погрешность недопустима в принципе. Конкретно в твоем примере замени и запусти: Код: plaintext
1. После каждой операции происходит округление до 4 знака, поэтому надо аккуратно делением пользоваться: Код: plaintext 1. 2.
Из плюсов: точность вычислений 18 знаков (больше будет ошибка переполнения), операции с CURRENCY выполняются немного быстрее чем с Numeric и Double. Лично я предпочитаю тип CURRENCY если его допустимо применить. Некоторые разработчики его не любят (в первую очередь из-за особенности деления). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 08:02 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
tanglirDima TЗапустить религия не позволила? vartype(x) вернет тип LOGICAL т.к. всем переменным объявленным в LOCAL присваивается .F., потому что написанное после AS игнорируется при выполнении.для неинициализированных переменых объявленный тип и впрямь не имеет значения. Пока они не инициализированы. А теперь запишите туда раунд(5,233648б2) и покажите вартайп. Ничего не понял. Это к чему сказано? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 08:05 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Dima Ttanglirпропущено... А теперь запишите туда раунд(5,233648б2) и покажите вартайп. Ничего не понял. Это к чему сказано?К тому, что пока в переменной по умолчанию .F., то, конечно, вартайп вернёт L, это и ежу понятно. Но что вернёт вартайп, если в переменную заранее объявленного типа всё-таки записать значение, которое можно трактовать либо как объявленный тип, либо как какой-то другой. Вопрос-то в этом был, или я что-то пропустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 15:27 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
tanglirDima Tпропущено... Ничего не понял. Это к чему сказано?К тому, что пока в переменной по умолчанию .F., то, конечно, вартайп вернёт L, это и ежу понятно. Но что вернёт вартайп, если в переменную заранее объявленного типа всё-таки записать значение, которое можно трактовать либо как объявленный тип, либо как какой-то другой. Вопрос-то в этом был, или я что-то пропустил? Пропустил, если вкратце, то была попытка доказать что "local x as doub" создает переменную типа DOUBLE. В хэлпе так написано: MSDNLOCAL Command Visual Studio .NET 2003 Creates local variables and variable arrays. LOCAL Var1 [AS type [OF ClassLib]] ... VarList Specifies one or more local variables to create. [ARRAY] ArrayName1 (nRows1 [, nColumns1]) [, ArrayName2 (nRows2 [, nColumns2])] ... Specifies one or more local arrays to create. See DIMENSION for a description of each argument. AS type Specifies the data type on which this variable or array is based. .... Оно и правда написано, только далее MSDNRemarks ... Variables and arrays created with LOCAL are initialized to false (.F.)... Как хочешь так и понимай. Вобщем ерунды какой-то понаписали в хэлпе по поводу типизации переменных. Тут еще интересный опус: How to: Implement Strong Typing for Class, Object, and Variable Code ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 15:52 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Вобщем мое мнение: конструкция "AS ..." в фоксе нужна только чтобы подсказки выскакивали при наборе кода (свойства, методы объектов) и на работу кода она никак не влияет, т.е. при выполнении кода игнорируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2011, 15:59 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
> Автор: Dima T > Вобщем мое мнение: ... Полностью разделяю это мнение. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2011, 14:22 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
автор> Автор: Dima T > Вобщем мое мнение: ... Полностью разделяю это мнение. Аналогично! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2011, 15:42 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Давно не заглядывал на форум.... вот наворочено-то :) Дима_Т, я не говорил ""local x as doub" создает переменную типа DOUBLE", тут у нас легкое недопонимание, из-за чего полагаю и возник сыр-бор. local x as doub описывает переменную, которая _после_ придания ей корректного значения будет держать это значение как DOUBLE. Разница в нюансах. А почему присваивает тип "поэкономней"... гм, потому что таков принцип фокса и не только его.. если по умолчанию присваивать наоборот, самые громоздкие типы - то рано или поздно начнуться проблемы.. например, с памятью. Пример с такси показался Вам недостаточно наглядным? ;) Или Вы наверно, везучий и по работе постоянно сталкиваетесь с новым железом и _не_ сталкивались с ситуацией "оперативка не более 256, причем половина ее уже забита всяким хламом" "Вобщем мое мнение: конструкция "AS ..." в фоксе нужна только чтобы подсказки выскакивали при наборе кода (свойства, методы объектов) и на работу кода она никак не влияет, т.е. при выполнении кода игнорируется."...ээээ мы на каких-то разных русских языках говорим, судя по всему :) какие нафиг подсказки если речь идет о _переменных_? Свойства и методы объектов касаются именно этих самых объектов, а какая подсказка по-Вашему должна вылезать при наборе переменной var1, объявленной как дубле? и в чем эта подсказка должна по-Вашему отличаться от переменной, объявленной AS INTEGER или AS еще много чего... Логика "для подсказок" сработает _только_ если объявляем AS Class... Во всех остальных случаях AS для подсказок не может быть использован, потому что ПОДСКАЗЫВАТЬ НЕЧЕГО. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2011, 22:19 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
SSn888local x as doub описывает переменную, которая _после_ придания ей корректного значения будет держать это значение как DOUBLE. Разница в нюансах. Чушь полная . local x as double абсолютно идентично local x и создает логическую переменную, никакую не double. И значение после as double этой переменной можно присвоить ЛЮБОГО ТИПА, хоть двадцать раз as double напишите. Потому что в фоксе динамическая типизация, а as double служит вовсе не для указания типа, как Вы думаете. Вы, похоже, фокс в глаза не видели :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2011, 23:18 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
XAndy, У Вас в Киеве всегда так принято слету хамить свысока или (надеюсь) - это только Вы такой выдающийся? Мне что - скан трудовой сюда со стажем вфп выложить? Окстись, не спеши судить свысока! На вопрос "а зачем тогда возможность написать AS double", кстати - внятного ответа так и не получил ("для подсказки" не канает - см. выше) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2011, 23:54 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
SSn888Давно не заглядывал на форум.... вот наворочено-то :) Дима_Т, я не говорил ""local x as doub" создает переменную типа DOUBLE", тут у нас легкое недопонимание, из-за чего полагаю и возник сыр-бор. local x as doub описывает переменную, которая _после_ придания ей корректного значения будет держать это значение как DOUBLE. Разница в нюансах. XAndy выше упоминал структуру ev_width , это и есть внутреннее хранение переменной в памяти: MSDN Value Structure Definition// An expression's value. Typedef struct { char ev_type; char ev_padding; short ev_width; unsigned ev_length; long ev_long; double ev_real; CCY ev_currency; MHANDLE ev_handle; ULONG ev_object; } Value; Value Structure Fields The following table is a guide to the values you can pass and receive in the Value structure for different types of data. Only the structure fields listed for a data type are used for that data type. Contents of Value structure for different data types Data typeStructure fieldValueNumericev_type'N'ev_widthDisplay widthev_lengthDecimal placesev_realDouble precision Нет там нескольких типов для нецелых чисел, только DOUBLE SSn888А почему присваивает тип "поэкономней"... гм, потому что таков принцип фокса и не только его.. если по умолчанию присваивать наоборот, самые громоздкие типы - то рано или поздно начнуться проблемы.. например, с памятью. Я уже писал что не память надо экономить. Считаем: 65535 - максимально возможное количество переменных в фоксе (по умолчанию 16384) 8 байт - под хранение DOUBLE т.е. под 65535 переменных DOUBLE надо 524280 байт, т.е. 0,5 Мб. Чего тут экономить? SSn888Или Вы наверно, везучий и по работе постоянно сталкиваетесь с новым железом и _не_ сталкивались с ситуацией "оперативка не более 256, причем половина ее уже забита всяким хламом" угу, есть еще вторые пни с W98 + 16Мб где действительно 6й фокс тормозит, правда стоит до 32Мб памяти добавить и все летает. SSn888какие нафиг подсказки если речь идет о _переменных_? Свойства и методы объектов касаются именно этих самых объектов, а какая подсказка по-Вашему должна вылезать при наборе переменной var1, объявленной как дубле? и в чем эта подсказка должна по-Вашему отличаться от переменной, объявленной AS INTEGER или AS еще много чего... Логика "для подсказок" сработает _только_ если объявляем AS Class... Во всех остальных случаях AS для подсказок не может быть использован, потому что ПОДСКАЗЫВАТЬ НЕЧЕГО. Немного истории фокса: в VFP6 (появился в 98м) подсказок не было и "AS" не было, после выхода SP5 мелкомягкие решили фокс похоронить, хоронили лет 5-6, потом неожиданно появилась 7-ка, следом в течении года 8-ка, в одной из которых это и появилось. Большая часть изменений были косметические, т.к. VFP6 имел устаревший вид прог под W95. Т.е. по-твоему в платформе которая была создана под слабые компы в очередной версии добавили оптимизацию переменных? Кстати это совсем немаленькая доработка. IntelliSence при подсказках пытается найти класс и вывести его свойства и методы, если не находит, то ничего не подсказывает. Повторяю, то что после AS игнорируется при выполнении, простой пример: Код: plaintext 1.
PS Не знаю как еще доказать отсутствие функционала, если ты считаешь что он все-таки есть - покажи пример кода при котором после добавления "AS ..." что-то изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 07:58 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
Dima T, 1) AS не влияет на функционал (твое утверждение, с которым, как вижу, есть достаточное количество согласных) 2) AS касаемо основных типов не служит для подсказки (см. выше) И все-таки: А для чего тогда введено AS? В смысле - для чего оно введено для типов (с классами-то понятно)? Руководствуясь простой нормальной логикой - "если есть - значит для чего-то надо"... И, пожалуйста, не надо столь подробных экскурсов в историю. Тут - излишне. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 12:14 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
ХЗ почему так сделали, могу только свои предположения высказать: 1. Не факт что в хэлпе под data type подразумеваются простые типы, может под data type классы пользователя подразумеваются: MSDNAS type Specifies the data type on which this variable or array is based. OF ClassLib Specifies the class library containing the type description on which the type element of this variable or array is based. Для базовых классов фокса можно без OF писать: Код: plaintext
Код: plaintext
2. Примечание (подсказка) разработчику какого типа задумана переменная. Хотя для решения этой проблемы с типами многие используют венгерскую нотацию. Вобщем сделали это для классов и добавили игнорирование любых непонятных слов, как следствие получилось что после AS можно писать все что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 14:06 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
SSn888И все-таки: А для чего тогда введено AS? В смысле - для чего оно введено для типов (с классами-то понятно)? Руководствуясь простой нормальной логикой - "если есть - значит для чего-то надо"... Так Вам уже несколько раз объяснили. Это исключительно "дизайнерская" штука. В смысле, используется для раннего связывания на этапе написания программного кода. Не исполнения! Ну, например, если написать так Код: plaintext
То потом, в тексте кода, если написать имя переменной loExcel и поставить точку, то отобразится выпадающий список свойств и методов объекта Excel (разумеется, если он был зарегестрирован). Без необходимости предварительного создания экземпляра Excel. То же самое будет справедливо и для внутренних (пользовательских) классов FoxPro. Однако, повторюсь, это действует только и исключительно на этапе разработки приложения "Design Time". На этапе исполнения кода (даже не в EXE, а просто для отладки) опция "as" - ничего не значит. Игнорируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 14:10 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
SSn888это только Вы такой выдающийся? Всё относительно )))))))) Не понятно, почему Вам так трудно выполнить в среде разработки две строчки кода? Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 14:30 |
|
Сравнение чисел double
|
|||
---|---|---|---|
#18+
XAndy, я вообще-то не претендовал на роль святого :) Тем не менее - "да, я был не прав в таком-то моменте" вовсе не означает "Да, Дмитрий прав". Есть какой-то третий вариант. Уже просто из спортивного интереса пытаюсь его нащупать... "Нахрена оно на самом деле" Пока мало чего выходит, если найду - обязательно сюда тисну.. А насчет троллингов... Сударь, если Вам мерещаться гоблины или есть желание поругаться - обратитесь к зеркалу. Оно, падла, всегда покажет какой-нить прыщик :);) Мне же лично просто доставляет удовольствие общение (пусть и не всегда.. ээ.. ровное) с людьми тут :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2011, 16:45 |
|
|
start [/forum/topic.php?fid=41&msg=37461125&tid=1584079]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 418ms |
0 / 0 |