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

Вниз

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

 
GAlexis   (2004-01-16 14:13) [0]

Уважаемые мастера! Помогите пожалуйста решить проблему. Нужно округлять числа с двумя занаками после запятой так: сначала надо округлить до одного занака после запятой, после этого нужно посмотреть какая это цифра, если пятерка - то округлить до целого вниз, если нет - то обычное округление. Потом берется следующее число, и при пятерке округление должно идти вверх и т.д.


 
Семен Сорокин   (2004-01-16 14:31) [1]

Помогите пожалуйста решить проблему.
А в чем проблема-то?
Алгоритм ясен.


 
AKul   (2004-01-16 14:36) [2]

Результат:=Round(Число*100)/100;
А если нужно только для отображения то FormatStr...


 
GAlexis   (2004-01-16 14:48) [3]

>Семен Сорокин Для меня алгоритм не ясен. Можно в лоб сделать, т.е. округлить до одного знака, потом конвертнуть FloatToStr, проверить наличие 5 после запятой, если есть, то SetRoundMode(rmDown), потом уже Round. И так применительно к 48 полям БД и 1500 записям. А ведь надо еще и чередовать округление вверх-вниз!


 
Ega23   (2004-01-16 14:57) [4]

А зачем FloatToStr?
Смотри:
Берём очередное X.

X:=Round(X*10)/10;
if X-Trunc(X)=0.5 then
SetRoundMode(rmDown)
else SetRoundMode(rmUp);
X:=Round(X);


 
alex_***   (2004-01-16 15:02) [5]

еще вариант: StrToFloat(FormatFloat("0.00",value))
правда я думаю не самый быстрый....


 
galexis   (2004-01-16 15:14) [6]

>Ega23 Видимо, подходит, спасибо. Но есть еще вопросик с чередованием вверх-вниз, т.е. Первый раз 0.5 встретилось, округляем вниз, второй раз - вверх и т.д. Надо что ли флаг поставить? Ну это ладно, мелочь. Еще я с Round запутался. SetRoundMode(rmUp) что будет означать?, то что 3,4 округлится до 4? или всетаки до 3?


 
Ega23   (2004-01-16 15:19) [7]

А я не знаю что такое SetRoundMode(rmUp) :0)
Просто увидел SetRoundMode(rmDown) и по аналогии .....
Если без SetRoundMode, то:

X:=Round(X*10)/10;
if X-Trunc(X)=0.5 then
X:=Trunc(X)
else X:=Trunc(X)+1;


 
Романов Р.В.   (2004-01-16 15:20) [8]

SetRoundMode оставь в покое
Round округляет числа с четной целой частью вниз с нечетной вверх (при SetRoundMode rmNearest).


 
galexis   (2004-01-16 15:25) [9]

>Ega23 Так еще лучше! Спасибо

всем спасибо!



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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
3-93383
Silver_
2003-12-30 16:20
2004.01.29
Post После Insert запись убегает в конец. Как на месте оставить


8-93592
Zheks
2003-08-26 15:35
2004.01.29
растягиваемый круглый Shape


1-93495
Татьяна
2004-01-19 13:46
2004.01.29
Размер ComboBox-а


3-93344
Vemer
2004-01-03 17:24
2004.01.29
Триггер не ловит Null вроде


1-93471
ГС ТОФ
2004-01-18 12:00
2004.01.29
Работа со слоями





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