Для таких расчетов не используйте типы с плавающей запятой, такие как Real, Single или Double. Они не очень хороши с десятичными значениями, такими как 0,01 или 1234,995, поскольку они должны приближаться к ним.
Вы можете использовать валюту, тип с фиксированной точкой, но она по-прежнему ограничена четырьмя десятичными знаками.
Попробуйте мой тип Десятичный , который имеет 28-29 мест и имеет десятичную степень, поэтому он идеально подходит для таких вычислений. Единственным недостатком является то, что он не поддерживается FPU (но, тем не менее, записан на ассемблере), поэтому он не так быстр, как встроенные типы. Он такой же, как и тип Decimal, используемый в .NET (но немного быстрее), и очень похож на тот, который используется на Mac.