Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизОкругление чисел Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c