Советы по Delphi

         

Значение вычисляемого поля Paradox вместо 25.55 становится 24.5499999...


Значение вычисляемого поля вместо 25.55 у меня выводится как 24.5499999. Скажите, что я делаю неправильно?

Вы не виноваты в ошибке калькуляции!

Я обнаружил ту же проблему в пакете учета, который я сейчас создаю. Мне кажется, что Borland сам делает в своем коде некий перерасчет значений.

Вы можете обойти проблему с помощью функции Round:

    SalesIncVAT:=round(SalesIncVAT*100)/100;  {дает вам два десятичных порядка}

ничего экстраординарного, это основное свойство математики плавающей точки, которая обеспечивает точность только в заданном интервале десятичных цифр. Точнее говоря, тип float точен для промежуточных целых чисел и для долей, которые представляют собой сумму компонентов в степени 2, любое другое число округляется исходя из переменной точности (7 цифр для "одинарной" точности, 15 для двойной и 20 для расширенной). Можно использовать процедуру Round или str:



    var
s : string; begin
str(SalesIncVat:10:2,s); {10 символов для целой части (с точкой) и 2 десятичных цифры} Label1.Caption:=s;

В справке написано, что функция FloatToStr преобразует число в строку с 15 десятичными цифрами - вот почему ваше число отображается столь причудливым образом, попробуйте эту функцию с числами типа 25.5, 25.25, 25.125 или подобными, которые имеют конечное представление в двоичной нотации, и эта проблема должна у вас исчезнуть.

Или используйте функцию FloatToStrF, которой в параметрах необходимо указать общую длину строки и количество десятичных цифр. [001169]



Содержание раздела