Для указания величин и размеров используйте тип данных Numeric. Численные значения содержать цифры от 0 до 9 и, необязательно, знак и десятичную точку. Visual FoxPro поддерживает шестнадцатиричные значения для данных типа numeric. Например, десятичное значение 255 может быть представлено как 0xFF.

NoteСовет

Для точных финансовых расчетов вместо рассматриваемого типа данных используйте тип данных Currency. Вы можете преобразовывать значения из Numeric в Currency и обратно, используя функции NTOM( ) и MTON(). Для получения более подробной информации смотрите описания Тип данных Currency, Функция NTOM() и Функция MTON().

В полях с типом данных Numeric, длина десятичной порции определяется во время разработки, когда вы создаете поле. Длина десятичной части является частью общей длины. Например, если вы указали длину равную 6 для поля типа numeric а также установили количество десятичный мест равное 4, то поле может хранить значения до 9.9999.

Подробные спецификации о типе данных Numeric смотрите в описании Типы данных и полей Visual FoxPro.

Expand image Точность чисел

При хранении чисел с плавающей запятой в полях Numeric, точность числа в Visual FoxPro ограничена примерно 15 цифрами. Поэтому, точность более чем в 15 цифр может быть потеряна при преобразовании из численных в бинарные числа, хранение чисел с бесконечно повторяющимися десятичными значениями в бинарных, производит множество повторяемых операций, а хранение численных значений в полях Character и в переменных памяти осуществляется в бинарном формате.

Такое ограничение основано на способе, каким Pentium-процессоры подсчитывают и хранят числа с плавающей запятой и следует спецификациям Institute of Electrical and Electronics Engineers (IEEE) для управления числами с плавающей запятой в бинарном формате. Этот стандарт позволяет хранит числа с плавающей запятой в разумном количестве пространства и производит операции расчетов более быстро.

Например, дробь 1/10 может быть представлна, как десятичное значение 0.1. Однако, при хранении 1/10 в бинарном формате, десятичное значение не является тем же самым, что и дробь. Вместо этого, дробь представляет собой повторяющиеся бинарные 0001100110011100110011 и тому подобное. Такой тип числа не может быть представлен в памяти, которая конечна и ограничена; поэтому, десятичные числа округляются и хранятся в бинарном формате.

Для значений, требующих высокой точности используйте тип данных Double.

Для получения более подробной информации о том, как хранятся числа с плавающей запятой и как Pentium-процессоры обрабатывают расчеты с их использованием, посмотрите статью Microsoft Knowledge Base Article - Q78113, "XL: Floating-Point Arithmetic May Give Inaccurate Results" по адресу http://support.microsoft.com/default.aspx?scid=kb;en-us;Q78113.

Приведенный ниже пример иллюстрирует ограничение точности чисел для чисел с плавающей запятой в отношении типа данных Numeric:

  CopyCode imageСкопировать код
x=1234567890.0987654321 
? x

Результат равен 1234567890.0987650000.

Expand image Смотрите также