|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не работают функции округления
Пожалуйста, помогите разобратся в следующей проблеме:
В библиотеке имеется функция, которая при вызове должна возвращать число типа Single вида 1,2345 (с четыремя разрядами после запятой). Это число генерируется внутри функции рандомизатором, затем преобразуется по определенному алгоритму, в результате получается, например, такое число: 0,381500005722046 далее, оно должно округлятся до 4-ёх разрядов после запятой с помощью соотвтетствующей функции, и возвращаться в кач-ве результата: Код:
n:=RoundTo(n,-4); Result:=n; Пробывал использовать вместо RoundTo функцию FormatFloat - результат одинаковый |
#2
|
||||
|
||||
Тебе надо использовать тип функции где больше количество знаков, используй Real или Extended
|
#3
|
|||
|
|||
Спасибо за совет, но он не помог.
Single,Double,Extended... Все это вещественные числа, отличаются только размером. Функция RoundTo должна работать со всеми этими типами. |
#4
|
|||
|
|||
Дробное число хранится в двоичном виде. Поэтому если это не степень двойки (напр., 0,25 = 1/4 = (2)^-2), то при преобразовании к десятичному виду всегда будет куча разрядов (нули или девятки и в конце что-нибудь), как ни округляй перед этим. Округление имеет смысл, если есть преобразование в строку (для вывода), например:
Код:
procedure TForm1.Button1Click(Sender: TObject); var x: Single; begin x:= StrToFloatDef(Edit1.Text, 0); Edit1.Text:= Format('%.4f', [x]); end; |