Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Как округлить число?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
14-77591
vopros
2002-05-18 12:07
2002.06.24
Хакер новоявленый (IronHawk)


1-77430
Vladimir Prokofiev
2002-06-11 11:46
2002.06.24
Про создание AVI-файлов прямо из Delphi


1-77415
кондратий
2002-06-10 18:21
2002.06.24
мышь и скролинг ...


1-77357
VDen
2002-06-12 20:17
2002.06.24
Взбесившийся указатель


1-77386
Random bystander
2002-06-13 12:40
2002.06.24
А как бы мне с ресурсами подружиться ?