Как правильно округлять дроби ...

ZSergey

Привет знатокам!вот кусочек кода:var S, T: string;begin Str(37.21115:7:5, T); S := T + ' rounds to ' + FloatToStr(RoundTo(7.21115,-4)) + #13#10; Str(37.21535:7:5, T); S := S + T + ' rounds to ' + FloatToStr(RoundTo(7.21535,-4)) + #13#10; MessageDlg(S, mtInformation, [mbOk], 0 );end;Прошу сильно не пинать, так как вопрос ламерский, и на форуме подобный вопос не раз уже обсуждался, но я так и не нашел решения :) Нужно чтобы перед 5 округление было в большую сторону,т.е. желаемый результат: 7.2112 и 7.2154
8 ответов

ZSergey

SimpleRoundTo


ZSergey

SimpleRoundTo
Пробовал, результат такой же. Число SimpleRoundTo(7.21535,-4) будет 7.2153, а мне надо 7.2154


ZSergey

так?стоит погуглить слово DecimalRounding_JH1 прежде чем использовать cкачать


ZSergey

так?стоит погуглить слово DecimalRounding_JH1 прежде чем использовать
Спасибо, никогда бы не подумал, что с округлением в D7 наступлю на грабли :)


ZSergey

Я округление через Trunc обычно делаю, а не через Round. С добавлением маленького значения (зависит от точности округления).А такую наворочанную и оттого медленную фукнцию - фтопку.


ZSergey

Пробовал, результат такой же. Число SimpleRoundTo(7.21535,-4) будет 7.2153, а мне надо 7.2154
Вас что прорвало сегодня с Round?Тебе только кажется, что у тебя 7.21535, на самом деле оно просто близкое к нему.


ZSergey

Вас что прорвало сегодня с Round?
Наверное, зачёт по одной теме у группы лиц.


ZSergey

<b>function</b> RoundUp(X: Extended): Extended; 
 <b>begin</b> 
 Result := Trunc(X) + Trunc (Frac(X) * <b>2</b>); 
 <b>end</b>;
и вообще вариантов куча, могёшь и комбинировать,надёюсь дойдёшь то того как легко и непринуждённо округлять до определённого знака (подсказка: используй * и /)