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

Вниз

Округление чисел   Найти похожие ветки 

 
sergeii ©   (2004-07-12 17:52) [0]

Как можно округлить число до 0,00 такого формата. Когдато в форуме видел линк на функцию округления


 
Тимохов ©   (2004-07-12 17:53) [1]

помножить на 100, округилть, поделить на 100.


 
sergeii ©   (2004-07-12 17:57) [2]

Когдато в фруме встречал линк на то как записать число словом, так там и алгоритм округления был. Т.Е. 12,506895 = 12,51


 
Андрей   (2004-07-12 17:57) [3]

Round ???????????
Trunc ???????????


 
Семен Сорокин ©   (2004-07-12 17:57) [4]

FormatFloat("0.00", Value)


 
Ega23 ©   (2004-07-12 17:58) [5]

sergeii ©   (12.07.04 17:57) [2]

Слушай Тимохова ©, он знает что говорит.


 
ASMiD   (2004-07-12 17:59) [6]

Value:=round(IntPower(10,100)*Value)/IntPower(10,100);


 
Андрей   (2004-07-12 17:59) [7]

to Семен Сорокин
В таком случае
12,49 -> 12,4
а не 12,5


 
Андрей   (2004-07-12 18:00) [8]

to ASMiD
Совершенно верно


 
Ega23 ©   (2004-07-12 18:09) [9]

Андрей   (12.07.04 17:59) [7]

Ну да?


 
Ega23 ©   (2004-07-12 18:11) [10]

ASMiD   (12.07.04 17:59) [6]

Осталось ещё логарифмы с экспонентой привлечь. И через CORBA Server всё считать. В отдельном потоке.


 
Андрей   (2004-07-12 18:15) [11]


> Ega23 ©   (12.07.04 18:09) [9]
> Андрей   (12.07.04 17:59) [7]
>
> Ну да?

Странный скептицизм. На самом деле задание формата не округляет число. В Паскале это было так (например)
var b: real;
b:=1,359
writeln b:2:2;
и на экране мы видели 1.35
Наксколько я понимаю понятие формата и округления с тех пор не изменились


 
Андрей   (2004-07-12 18:17) [12]

Во я только что попробовал - FormatFloat действительно не округляет


 
ASMiD   (2004-07-12 18:18) [13]


> Осталось ещё логарифмы с экспонентой привлечь. И через CORBA
> Server всё считать. В отдельном потоке.


Зато на все случаи жизни для произвольного количества знаков.
Я думал это понятно.


 
Семен Сорокин ©   (2004-07-12 18:18) [14]


> Андрей   (12.07.04 18:15) [11]
> Странный скептицизм. На самом деле задание формата не округляет
> число. В Паскале это было так (например)
> var b: real;
> b:=1,359
> writeln b:2:2;
> и на экране мы видели 1.35
> Наксколько я понимаю понятие формата и округления с тех
> пор не изменились

Вы бы сначала проверили, а потом бы так категорично утверждали.


 
Ega23 ©   (2004-07-12 18:20) [15]

Андрей   (12.07.04 18:15) [11]

Проверь данный код:

procedure TForm1.Button4Click(Sender: TObject);
var
d:double;
ss:string;
begin
d:=12.49;
d:=Round(d*100)/100;
Str(d:10:4,ss);
Label1.Caption:=ss;
end;

Одно дело представление на экране, другое дело значение самой переменной.


 
ASMiD   (2004-07-12 18:21) [16]


> Вы бы сначала проверили, а потом бы так категорично утверждали.

Это точно.


 
Ega23 ©   (2004-07-12 18:23) [17]

Зато на все случаи жизни для произвольного количества знаков.
Я думал это понятно.

Это понятно, но этот способ слишком громоздкий. Гораздо проще написать 3 функции Round1, Round2, Round3 и пользоваться ими.


 
ASMiD   (2004-07-12 18:31) [18]

Не спорю, но не громоздкий, а более медленный, а при случае, если заранее число знаков не известно, то по написанию то и более громоздкий
case dcc of
 0:Str(Val:1:0,st1);
 1:Str(Val:3:1,st1);
 2:Str(Val:4:2,st1);
 3:Str(Val:5:3,st1);
 4:Str(Val:6:4,st1);
end;


 
Ega23 ©   (2004-07-12 18:56) [19]

ASMiD   (12.07.04 18:31) [18]

Ну да, медленный, это я и хотел сказать.
Как правило, округление до второго-третьего знака нужно, когда работаешь с финансовой системой. Общая функция округления до N-го знака в таком случае будет ненужна. А вот если задача стоит написать действительно УНИВЕРСАЛЬНУЮ функцию, то тогда, конечно, Value:=round(IntPower(10,100)*Value)/IntPower(10,100); будет верно (в случае, если система счисления - десятичная :о) ).

case dcc of
0:Str(Val:1:0,st1);
1:Str(Val:3:1,st1);
2:Str(Val:4:2,st1);
3:Str(Val:5:3,st1);
4:Str(Val:6:4,st1);
end;

А здесь ты не ОКРУГЛЯЕШЬ число. Ты только подгоняешь его строковое представление.


 
ASMiD   (2004-07-12 19:02) [20]

Виноват, действительно выложил не тот пример.
Для финансов Ok.
А я делал задачу округления показаний счетчиков (несколько десятков штук) и заранее заказчик не знал, "скока вешать" и пришлось задавать число знаков в INI файле, чтобаы не переписывать прогу.
А вообще - это бесполезный спор - каждый делает так, как ему удобнее.


 
Ega23 ©   (2004-07-12 19:12) [21]

А я делал задачу округления показаний счетчиков (несколько десятков штук) и заранее заказчик не знал, "скока вешать" и пришлось задавать число знаков в INI файле, чтобаы не переписывать прогу.

Это другое дело, тут по-другому - никак.

А вообще - это бесполезный спор - каждый делает так, как ему удобнее.

100% в точку.



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
3-1088409321
Aln
2004-06-28 11:55
2004.07.25
Изменить значение поля таблицы Access (компонент доступа ADO)


3-1088603725
Lesica
2004-06-30 17:55
2004.07.25
BDE транслирует поле типа MONEY в DECIMAL


14-1089200698
GanibalLector
2004-07-07 15:44
2004.07.25
BPWin


14-1088862567
ИМХО
2004-07-03 17:49
2004.07.25
Русские теннисистки продолжают рулить!


3-1088552573
Alexey Leonchik
2004-06-30 03:42
2004.07.25
Быстрый поиск по первым символам