PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 78


Альтернативное решение — преобразовать числа в целые, умножая их на соот­ветствующий коэффициент.

Комментарий

Процедура equal понадобилась из-за того, что в компьютерах многие числа с плавающей запятой представляются с ограниченной точностью. Дополнительная информация приведена в разделе «Введение».

При фиксированном количестве цифр в дробной части (например, в денеж­ных суммах) проблему можно решить преобразованием в целое число. Если


2.3. Округление чисел с плавающей запятой    71

сумма 3.50 будет храниться в виде 350, а не 3.5, необходимость в числах с пла­вающей запятой отпадает. Десятичная точка снова появляется в выводимых дан­ных:

Swage = 536,                           # $5 36/час

$week = 40 • Swage,          в $214 40

printf( One week's wage is    \$% 2f\n     Sweek/100),

One  week's  wage   is:   $214.40

Редко требуется сравнивать числа более чем до 15 разряда.

> Смотри также---------------------------------------------------------------------------------------------

Описание функции sprintf вperifunc(\); описание переменной $# в странице ру­ководства perlvariX); документация по стандартному модулю Math::BigFloat. Функция sprintf используется в рецепте 2.3. Также обращайтесь к разде­лу 4.2.2 тома 2 «Искусство программирования».

2.3. Округление чисел с плавающей запятой

Проблема

Число с плавающей запятой требуется округлить до определенного разря­да. Проблема связана с теми же погрешностями представления, которые за­трудняют сравнение чисел (см. рецепт 2.2), а также возникает в ситуациях, когда точность ответа намеренно снижается для получения более наглядного резуль­тата.

Решение

Для получения непосредственного вывода воспользуйтесь функциями Perl sprintf

или printf:

Srounded = sprintf( %FORMATf ,   Sun rounded),

Комментарий

Округление серьезно отражается на работе некоторых алгоритмов, потому ис­пользуемый метод должен быть точно указан. В особо важных приложениях (на­пример, в финансовых вычислениях или системах наведения ракет) грамотный программист реализует свою собственную функцию округления, не полагаясь на встроенную логику языка (или ее отсутствие).




Начало  Назад  Вперед