Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> урезка чисел после запятой для типа Single 
:(
    Опции темы
Grif13
Дата 18.1.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 6.7.2005

Репутация: нет
Всего: нет



есть число типа Single,
которая равняется например "-37,455120087"
надо получить из него число "-37,45"

Делаю так

UData:=(int(UData*100))/100;

и так

UData:=(round(UData*100))/100;

получается что то вроде "-37.459999084"

в чем проблема
PM MAIL   Вверх
DemoCode
Дата 18.1.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



FormatFloat попробуй

Это сообщение отредактировал(а) DemoCode - 18.1.2006, 16:53


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
sexton
Дата 18.1.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Может не совсем то, но все же - RoundTo
PM MAIL WWW ICQ   Вверх
Marriage
Дата 18.1.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Код

str:=copy(FloatToStr(pNumber),1,Pos(',',FloatToStr(pNumber))+2);


pNumber - число
Str - строка


точность ограничивается 15-ю значимыми цыфрами

Это сообщение отредактировал(а) Marriage - 18.1.2006, 17:27


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Alexeis
Дата 18.1.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

получается что то вроде "-37.459999084"

Операции над числами с плавающей точкой (в данном случае деление) осуществляются с некоторой машинной погрешностью
Так что подобный результат неизбежен.
ps Красиво форматировать можно только строки и целые числа

Это сообщение отредактировал(а) alexeis1 - 18.1.2006, 17:29


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Guedda
Дата 18.1.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



функция FloatToStrF. Можешь почитать в хелпе
Вот метод:
Код

var
  x : real;
begin
  x := 120/33;
  ShowMessage(FloatToStrF(x, ffNumber, 8,2));
end;



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Grif13
  Дата 19.1.2006, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 6.7.2005

Репутация: нет
Всего: нет



ни чего не помогает

Может проблема в другом

даже если в переменную типа single заношу к примеру 2.37
то в в ней оказывается 2.3699998856


PM MAIL   Вверх
Alexeis
Дата 19.1.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

даже если в переменную типа single заношу к примеру 2.37
то в в ней оказывается 2.3699998856

такое тоже возможно так как не все вещественные десятичные можно перевести точно в двоичное представление.
2.37D = 10.0(1011110000)B те с периодом.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rennigth
Дата 19.1.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



не оптимально может быть, но все же:
Код

function RoundFloat(AValue: Extended; ALengthMantice: Integer): Extended;
var
  lRes: string;
  lMantice: string;
  i: Integer;
begin
  SetLength(lMantice, ALengthMantice);
  for i := 1 to ALengthMantice do
    lMantice[i] := '0';
  lMantice := '0.' + lMantice;
  lRes := FormatFloat(lMantice, AValue);
  Result := StrToFloatDef(lRes, 0);
end;



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.