var
test : double; // переменная типа double
begin
test := 22/7;
// форматируем double в строку, оставляя после запятой 18 знаков
Edit1.Text := Format('%.18f',[test]);
Edit2.Text := Format('%.18f',[22/7]);
Управление экспоненциальной формой
Столкнулся с такой проблемой.
В базе хранятся значения типа numeric(18,15). При извлечении таких значений из бд путем ( скажем 0.00000000123 ) они автоматически преобразовываются в экспоненциальную форму и в эдиты на форме также кладутся строки подобного формата.
Вопрос, как увеличить количество знаков после запятой для которого бы дробная переменная преобразовывалась в строку экспоненциального вида?
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.
Цитата: Gole
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.
Это ограничение типа Double. Боюсь, его никак не обойти.
Код:
В результате выводится число с 18-ю знаками после запятой. 19 знаков уже не получается. Вот что говорит MSDN:
Цитата:
Microsoft Specific
The double type contains 64 bits: 1 for sign, 11 for the exponent, and 52 for the mantissa. Its range is +/–1.7E308 with at least 15 digits of precision.
т.е. как минимум 15-ти значную точность double обеспечивает.
Цитата: IL84
т.е. как минимум 15-ти значную точность double обеспечивает.
Вообще-то, да. Сам тоже иногда ленюсь в справку заглядывать. Вот что написано в справке Дельфи (для Билдера, думаю, аналогично):
Код:
Type Range Significant digits Size in bytes
Double 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8
Double 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8
Цитата: Gole
Всем привет.
Столкнулся с такой проблемой.
В базе хранятся значения типа numeric(18,15). При извлечении таких значений из бд путем ( скажем 0.00000000123 ) они автоматически преобразовываются в экспоненциальную форму и в эдиты на форме также кладутся строки подобного формата.
Вопрос, как увеличить количество знаков после запятой для которого бы дробная переменная преобразовывалась в строку экспоненциального вида?
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.
Столкнулся с такой проблемой.
В базе хранятся значения типа numeric(18,15). При извлечении таких значений из бд путем ( скажем 0.00000000123 ) они автоматически преобразовываются в экспоненциальную форму и в эдиты на форме также кладутся строки подобного формата.
Вопрос, как увеличить количество знаков после запятой для которого бы дробная переменная преобразовывалась в строку экспоненциального вида?
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.
Если позволяют компоненты доступа к БД и клиентская часть СУБД, переходи на формат BCD в своей программе. Кстати, на всякий случай: какая СУБД?