Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.145 c
1-1089721797
BillyJeans
2004-07-13 16:29
2004.07.25
TreeView и ScrollBars


8-1083415371
Sonic-gd
2004-05-01 16:42
2004.07.25
Графический редактор


1-1089274152
sashok
2004-07-08 12:09
2004.07.25
Выполнение процедур из dll


3-1088423557
Igoryok
2004-06-28 15:52
2004.07.25
Установка MSDE


9-1080207016
GrayFace
2004-03-25 12:30
2004.07.25
Преимущества DirectX перед Canvas + TBitmap.ScanLine





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский