Закръгляване в InterBase
Не мога правилно да закръгля числа с плаваща запетая. В InterBase декларирани променливи NUMERIC(15,2) - тип валутен формат. В InterBase Interactiv SQL те изглеждат добре, но когато ги прочетете от Delphi или от SQL Explorer, той ги показва с голям брой десетични знаци (в зависимост от това колко десетични знаци има - само 15 десетични знака). В резултат се натрупва грешка и стотинките не съвпадат. Не намерих функции за закръгляване в InterBase. Опитах се да напиша функция в UDF, която да закръгли до желания десетичен знак, но когато се изпълни, по някаква причина се връща незакръглена стойност, 0.
така че на ib.demo.ru вземете готовия UDF. И там ще имате закръгляване и много по-полезно
Завъртете на ниво приложение и всичко ще бъде наред! (Реших тези проблеми - ако имате конкретни въпроси - питайте)
На ниво приложение не работи. сумирането се случва в съхранена процедура, ще погледна ib.demo.ru. Благодаря за съвета.
SQL Explorer работи чрез BDE, така че няма какво да се изненадваме - такава "супер" работа с дробни числа е традиционно "достойнство" на BDE. И е по-добре да държите парите в цели копейки. И още по-добре с цели центове. :) За всеки случай прочетете Ръководството за дефиниране на данни (така изглежда) за реалностите на InterBese-всички NUMERIC-и - едно вълнуващо четиво.
Извинявам се за "InterBese-total". Второ, определено можете да работите с IB5.5 чрез InterBaseExpress
По-добре е да използвате тип поле с двойна точност - тогава точността не се губи и можете да закръгляте безболезнено
BDE е напълно без значение тук! И цялата работа е, че в IB стойностите на полетата от тип c с плаваща запетая се съхраняватнаистинас квадратна точка, т.е. под формата на двоично представяне и следователно чрез запис вполе, например, 23.0 всъщност ще съдържа нещо като 23.00000014! Затова дръжте парите в копейки, съгласен съм, подходът е правилен, но това ще трябва да се вземе предвид в приложението.
Че е по-добре да държа парите в копейки, ми просветна, но беше твърде късно - имаше много за преправяне. Благодаря на всички за участието, особено на Александър, намерих подходящ UDF на ib.demo.ru.
2Johnmen NUMERIC(15,2) - не е число с плаваща запетая.