Главная страница
    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.038 c
3-1088508416
DSKalugin
2004-06-29 15:26
2004.07.25
Программная Индексация DBase III


3-1088412936
MORA
2004-06-28 12:55
2004.07.25
dbExpress


6-1085802948
Vizzor
2004-05-29 07:55
2004.07.25
Как можно проверить включен ли HTTP/FTP через сокеты?


14-1088875636
Sanek_metaller
2004-07-03 21:27
2004.07.25
Мисс Вселенная 2004


1-1089276204
Sandman25
2004-07-08 12:43
2004.07.25
Флаги или переопределение событий?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский