![]() |
|
|
#16
|
||||
|
||||
|
Цитата:
На счёт типа Currency - хороший совет. Но он не прокатит, после запятой у меня максимум 6 знаков, а Currency дает только 4. Цена, к примеру: 2,325 умножается на количество топлива 1,356 (будь они не ладны эти миллилитры) Да, с вариантом 0,49999999 округление у меня получается правильное (арифметическое), а если учитывать, что у вещественного числа у меня может быть максимум 6 знаков после запятой, то вполне устраивает. Спасибо за беспокойство, не утруждайте себя поиском. Всё прекрасно работает, просто я хотел найти более эстетичный вариант. P/s теперь понимаю, почему бытовые процессоры не ставят на военную технику. |
|
#17
|
||||
|
||||
|
Если бы мне действительно понадобилась точность до 6 знаков после запятой я бы написал пару функций и работал с целыми числами.
|
|
#18
|
||||
|
||||
|
Цитата:
Тоже возникала идея работать с двумя частями вещественного числа как с целыми числами, но пара функций уже не одна ![]() |
|
#19
|
||||
|
||||
|
Чьорт, в некоторых случаях и множество девяток не помогает
![]() Если кто может помочь, буду благодарен |
|
#20
|
||||
|
||||
|
Наконец-то нашёл правильную функцию арифметического округления
Код:
function SimpleRoundTo(const AValue: Extended; const ADigit: TRoundToRange = -2): Extended;
var
LFactor: Extended;
begin
LFactor := IntPower(10, ADigit);
if AValue < 0 then
Result := Trunc((AValue / LFactor) - 0.5) * LFactor
else
Result := Trunc((AValue / LFactor) + 0.5) * LFactor;
end;Округляет всё правильно. Нужно подключить модуль Math для её работы. Спасибо всем за помощь. |