Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Управление экспоненциальной формой

7.4K
22 июня 2007 года
Gole
31 / / 31.10.2005
Всем привет.
Столкнулся с такой проблемой.
В базе хранятся значения типа numeric(18,15). При извлечении таких значений из бд путем ( скажем 0.00000000123 ) они автоматически преобразовываются в экспоненциальную форму и в эдиты на форме также кладутся строки подобного формата.
Вопрос, как увеличить количество знаков после запятой для которого бы дробная переменная преобразовывалась в строку экспоненциального вида?
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.
10
22 июня 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Gole
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.


Это ограничение типа Double. Боюсь, его никак не обойти.

497
22 июня 2007 года
IL84
267 / / 24.04.2003
Проверил вывод в delphi, вот что получилось:
 
Код:
var
  test : double; // переменная типа double
begin
  test := 22/7;
  // форматируем double в строку, оставляя после запятой 18 знаков
  Edit1.Text := Format('%.18f',[test]);
  Edit2.Text := Format('%.18f',[22/7]);

В результате выводится число с 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 обеспечивает.

10
22 июня 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: IL84
т.е. как минимум 15-ти значную точность double обеспечивает.


Вообще-то, да. Сам тоже иногда ленюсь в справку заглядывать. Вот что написано в справке Дельфи (для Билдера, думаю, аналогично):

 
Код:
Type    Range               Significant digits  Size in bytes
Double  5.0 x 10^–324 .. 1.7 x 10^308 15–16         8
294
23 июня 2007 года
Plisteron
982 / / 29.08.2003
Цитата: Gole
Всем привет.
Столкнулся с такой проблемой.
В базе хранятся значения типа numeric(18,15). При извлечении таких значений из бд путем ( скажем 0.00000000123 ) они автоматически преобразовываются в экспоненциальную форму и в эдиты на форме также кладутся строки подобного формата.
Вопрос, как увеличить количество знаков после запятой для которого бы дробная переменная преобразовывалась в строку экспоненциального вида?
Функция FormatFloat не момогает, более того она работает некорректно при значениях порядка минус 10-ой степени.


Если позволяют компоненты доступа к БД и клиентская часть СУБД, переходи на формат BCD в своей программе. Кстати, на всякий случай: какая СУБД?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог