Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизКак округлить число? Найти похожие ветки
← →
SunVit (2002-06-11 00:37) [0]Как округлить real число (без Round)?
Пример: 123,123
Ответ: 123,12
← →
IB (2002-06-11 01:06) [1]
function MyRound(n: Real; z: Integer) :Real;
begin
result := Int(n*IntPower(10,z))/IntPower(10,z);
end;
← →
Anatoly Podgoretsky (2002-06-11 01:30) [2]Попробуй округлить 0,02
← →
IB (2002-06-11 01:46) [3]MyRound(0.02,-1) = 0
MyRound(0.02,0) = 0
MyRound(0.02,1) = 0
MyRound(0.02,2) = 0.02
MyRound(0.02,3) = 0.02
← →
drpass (2002-06-11 02:02) [4]А стандартную функцию RoundTo не проходили?
← →
IB (2002-06-11 02:09) [5]Стандартную где?
Да и ведь сказано: без Round.
← →
kaif (2002-06-11 02:24) [6]if frac(a) >= 0.005 then
Result := trunc(a*100)/100 + 0.01
else
Result := trunc(a*100)/100
Правда, в D3 trunc не in64 возвращает, а integer.
Поэтому в D3 это будет работать только с небольшими числами.
← →
KilkennyCat (2002-06-11 06:16) [7]Гы... а я вот как придумал! без роунда! только код писать лень, но тема будет понятна:
Делаем сначала FloatToStr, ищем позицию запятой, копируем в новую строку с начала до одного символа после запятой, в старой строке смотрим третий символ после запятой и если его Ord() меньше чем Ord("5"), то к новой строке прибавляется символ, равный третьему после запятой символу старой строки, иначе к новой строке прибавляется сhr(inc(ord(второй символ после запятой старой строки))).
Ну и СтрТуФлот полученное
Как вам математические операции через строки и коды символов?
← →
Johnmen (2002-06-11 10:12) [8]>kaif © (11.06.02 02:24) : Не всегда верно....:()
← →
kaif (2002-06-11 11:26) [9]>2 Johnmen © (11.06.02 10:12)
Внимательно не смотрел. Скорее это просто идея. Если под D3 разрядности не хватит, все равно нужно будет менять алгоритм.
Можно, например, разбить на целую и дробную части:
int_part := int(a);
frac_part := frac(a);
и потом что-то предпринять по округлению (с кучей if-ов).
Пусть это длинно, но работать будет быстро (если это требуется). До сих пор не ясен мотив, почему round отвергнут. Может, это прояснило бы дело...
← →
Skyle (2002-06-11 12:28) [10]
> Гы... а я вот как придумал! без роунда! только код писать
> лень, но тема будет понятна:
и т.д...
Короче, это примерно то же самое, что микроскопом гвозди забивать... Есть гораздо более подходящие идеи по этому поводу... А это... Размах не тот...
А если тебе так нравится математические операции через строки, то попробуй посчитать 1 000 000!, может надоедят...:))))
← →
Nicolas_ (2002-06-11 12:28) [11]IB: попробуй округлить, например, 0.48 до 1 знака.
SunVit: y := (trunc((x + 0.005) * 100)) / 100
← →
Johnmen (2002-06-11 12:44) [12]>Nicolas_ (11.06.02 12:28)
>y := (trunc((x + 0.005) * 100)) / 100
Не всегда верно....:()
← →
АК-74 (2002-06-11 16:44) [13]Учтем отбрасываемую цифру:
function MyRound(n: Real; z: Integer): Real;
var
Mult: Extended;
begin
Mult := IntPower(10,z);
result := Int((n+0.5/Mult)*Mult)/Mult;
end;
← →
Johnmen (2002-06-11 17:13) [14]>АК-74 (11.06.02 16:44)
Не всегда верно....:()
← →
АК-74 (2002-06-11 18:21) [15]Я догадываюсь, что нет предела совершенству.
Но куда подевался автор вопроса? Ведь задача так и не ясна...
Кстати, когда неверно?
← →
KilkennyCat (2002-06-11 21:24) [16]To Skyle :
Это ведь шутка была, хоть и работающая :)
Но в каждой шутке... Иногда такие альтернативные методы очень помогают. А вообще, я сейчас подумаю об умножении...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c