Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
NickBat   (2003-04-02 17:36) [40]

Ухх..
Пусть есть число: 14.34
В компьютере оно может храниться как 14.339999999999, но отражаться на экране оно будет как 14.34!!
Если попробывать отбросить третий знак после запятой, то получим на выходе 14.33 - вот и вся математика.


 
UDS   (2003-04-02 18:59) [41]

Ну и навертели!!! Я всегда использую самый простой и быстрый способ:

(round(rez*10)/10) // rez-это значение(real),которое округляем до десятых
(round(rez*100)/100) // до сотых
(round(rez*1000)/1000) // до тысячных

и т.д.
а может я не правильно понял вопрос?


 
Style   (2003-04-03 08:24) [42]

NickBat © >>
Я же делаю Ceil округление в большую сторону.
поэтому если число 13.4499999 получиться 13.45..

Но вот если после запятой 2 знака а округляем до 10000 тысячных
тут могут возникнуть проблеммы.
Поэтому нужно отделять целую часть от дробной.


 
Style   (2003-04-03 09:09) [43]

Вот так все отлично работает!

function FlRound(Fl: double; M: Integer): double;
var
z,i: integer;
f: double;
begin
z := 1;
for i:= 1 to M do
z:= z * 10;

f := fl*z;
f := Ceil(f);

Result := f / z;
end;

Проблемма была в следующем фунцкция Ceil это
Result := integer(trunc(x));
If(Frac(x) > 0) then Inc(Result);

Входной параметр trunc - это Extended т.е. если
мы пишем
Ceil(3.77 * 100) то получиться 388. т.е. в Extended появляеться Frac часть и Count возрастает

а если вычисление проводить в отдельной переменной типа Double
то ответ получаеться правильным!



 
Style   (2003-04-03 10:02) [44]

А если нужны большие число то вот так :)

Народ у меня все работает если и 1,999999999 и 1,0000000000001
все округляет вродеправильно посмотрите

function FlRound(Fl: double; M: Integer): double;
var
a,z,i: integer;
j,f: double;
s : string;
begin
z := 1;
for i:= 1 to M do
z:= z * 10;
a := trunc(int(fl));
j := Frac(Fl);
f := j*z;
s := floattostr(f - trunc(Int(f)));
if(s[1] = "0") then
f := Ceil(f);
f := f / z;

if(trunc(int(f)) > 0) then Inc(a);
Result := a + f;
end;


 
Style   (2003-04-03 10:40) [45]

Вот как можно )

function FlRound(Fl: double; M: Integer): double;
var
d : double;
begin
d := intpower(10,M);
if(Fl>0) then
result := Round(fl * d + 0.5) / d else
result := Round(fl * d - 0.5) / d;
end;


 
phantom2040   (2003-04-08 11:59) [46]

Я как-то бился с округлением, вот что я выйскал, в D7 есть функция, RoundTo округляет по мат правилам, но на его работу влияет функция SetRoundMode, SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode;
ее постоянные
rmNearest
rmDown это в меньшую сторону
rmUp это в большую сторону
rmTruncate
причем при значении rmUp округляется все в большую сторону даже если 3 знак =1


 
Silver_   (2003-04-08 12:10) [47]

RoundTo(a+0.001,-2);

результат должен быть:
1.111 = 1.11
1.144 = 1.14
1.145 = 1.15
1.149 = 1.15

думаю то что надо (писал прямо здеся (не проверял) но должно работать)



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

Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.01 c
14-54801
RENEGAT
2003-03-31 12:56
2003.04.17
Голосовые технологии и кое-что ещё


1-54646
OlegM
2003-04-08 09:47
2003.04.17
Как картинку сохранить в текстовый файл


3-54461
sergun
2003-03-28 20:19
2003.04.17
Сопоставление полей


7-54918
IceMan_T
2003-02-19 15:07
2003.04.17
использование ASPI


8-54767
xenos
2003-01-14 21:36
2003.04.17
Простейший пример наложения текстуры в OpenGL на примитив





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