|
#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 для её работы. Спасибо всем за помощь. |