Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Всем привет! А никто с такой ерундой не сталкивался? ?6763627696664469 или, то же самое ?VAL("6763627696664469") Это и в 7-ой, и в 8-ой версии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 18:47 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Неа, только с такой ?67636276966644693456346756472436492836329763189771376973289769732 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 18:59 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
to Peper и т.п.: Спасибо! УмнО! Наверное, в лом Фокс запустить? Лично для Вас: ?6763627696664469 как и ?VAL("6763627696664469") выводит вот такой результат: 67636276966644 70 Проблема больших чисел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 20:32 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
А документацию читать "не в лом" ? VAL( ) FunctionSee Also SET DECIMALS | STR( ) | SYS( ) Functions Overview Returns a numeric or currency value from a character expression composed of numbers. You can use VAL( ) to convert the character strings returned by the Visual FoxPro SYS( ) functions to numeric values. VAL(cExpression) Parameters cExpression Specifies a character expression composed of up to 16 numbers. Rounding occurs if more than 16 numbers are included in cExpression. If the first character of cExpression is a dollar sign ($),VAL( ) returns a currency value. In all other situations VAL( ) returns a numeric value. Удачи в новых экспериментах! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2004, 23:56 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Спасибо, Sergey! Sorry, "француз" я... Но даже с моим скудным английским - читал, не обламывался: "Rounding occurs if more than 16 numbers are included in cExpression" - в моем примере не более 16 цифр. И почему же не округляется "6763627696664468"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 00:14 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Вдогонку... Черт с ним, с этим VAL()! А простой " ? " почему так делает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 00:17 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
создать курсор типа Код: plaintext 1. 2. Затем можно попробовать ввести это число вручную. Это - не глюк, это - недокументированная особенность!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 07:09 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
"Пособие для начинающих" "Типы данных" ================================================== Numeric (Float) Numeric и Float - это два разных названия для одного и того же типа данных. В дальнейшем, я буду говорить о типе данных Numeric. По умолчанию, любая переменная памяти, содержащая число интерпретируется как переменная типа Numeric, если тип переменной не был указан явно каким-либо способом. Очень важным для понимания особенностей типа данных Numeric является то обстоятельство, что физически эти данные хранятся как символьные данные. Т.е. каждая цифра, а также символ разделитель целой и дробной части физически хранятся как обычные символы. Если Вы откроете файл DBF как обычный текстовый файл (например, с помощью программы "Блокнот" ("Notepad")), то Вы увидите, что число 1234.56 прямо так и записано. Нет какого-либо преобразования. Как следствие, ничто не мешает вместо дробной части записать целую часть числа. И действительно, если Вы определите размерность поля, например, как Numeric(5,2), то в такое поле можно записать данные до значения 99999, а не 99.99 как предполагается из заданной размерности. Т.е. указание дробной части носит скорее рекомендательный, чем обязательный характер и вся дробная часть (включая символ разделитель) в случае необходимости может быть использована для записи целой части числа. Выполните такую проверку Код: plaintext 1. 2. 3. Фактически, работая с полями типа Numeric, если у них задана дробная часть, то Вы всегда имеет некоторый запас размерности на количество знаков дробной части плюс один знак на символ разделитель. Другая особенность касается не столько типа данных Numeric, сколько числовых данных вообще. Дело в том, что системным ограничением FoxPro является тот факт, что при любых расчетах точность вычисления ограничивается 16 значащими цифрами. Это значит, что если Вы желаете посмотреть более 16 значащих цифр, то все последующие разряды будут заполнены "мусором". Точнее случайными данными. Выполните такую проверку Код: plaintext 1. 2. Вы увидите, что реально оказались заполнены только первые 14 разрядов. Здесь сыграли роль другие факторы, которые уменьшили количество значащих цифр еще на 2. Данная особенность говорит о том, что если Вы предполагаете работать с числами, имеющими более 16 значащих цифр, то доверять Вы сможете только первым 14. Еще 2 цифры будут сомнительными, а остальные - случайными. Повторюсь еще раз - это особенность не типа данных Numeric, а системное ограничение FoxPro. Т.е. справедливо для любого числового типа данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 10:02 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
ВладимирM...сыграли роль другие факторы, которые уменьшили количество значащих цифр еще на 2... Владимир! Именно эти самые "другие факторы" меня и интересуют... И если их нельзя устранить, то как их обойти? P.S. "Пособие для начинающих" мне не нужно - я с Фоксом с 92-го... P.S.S. Просто раньше проблема 16-ти цифр не возникала, а тут появились банкиры, которым подавай 16 знаков (номер пластиковой карточки) обязательно как Numeric :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 12:57 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю логику работы FoxPro, то здесь какие-то заморочки с округлением происходят. Чтобы получить достоверными 16 разрядов необходимо уметь работать с 18 (это из мат.теории - количество достоверных+2). А поскольку FoxPro умеет работать только с 16 разрядами, то надеятся (считать достоверными) можно только на 14 разрядов. В FoxBase была такая команда SET PRECISION, но в VFP она не работает (точнее всегда устанавливает 16) Так что, реальным остается только работа с символьными данными :( Тем более, если речь идет о номере карточки, то использование Character предпочтительнее. Я так понимаю, они настаивают на числовых типах исходя из необходимости как-то анализировать этот код. Думаю, этот анализ вполне можно сделать и для символьного типа. Впрочем, попробуй повторить свой вопрос на сайте http://forum.foxclub.ru/list.php?f=5 Там больше народу. Может кто посоветует что-нибудь еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 13:42 |
|
||
|
Глюки функции VAL() ?
|
|||
|---|---|---|---|
|
#18+
Насчет Character - абсолютно согласен! Так я им и сделал - пускай сами мучаются! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2004, 13:47 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32448048&tid=1596960]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 442ms |

| 0 / 0 |
