Как бы Вы сделали - Округление числа типа double

Yulka-MOl

Вопрос по C/C++
Дано число x типа double надо его округлить _В_МАТЕМАТИЧЕСКОМ_СМЫСЛЕ_
То есть func(5.4) = 5
func(5.5 ) = 6
Суть вопроса : приходится работать с дробной частью числа.
Я его выделяю так
double z;
z = x - double(int(x;
Как это написать красиво, без этого изврата?

Ivan8209

apropos fractional
---
"Аллах не ведёт людей неверных."

psihodog

amen

Yulka-MOl

по-русски, если можно
есть какая-нибудь стандартная функция в библиотеках для выделения дробной части?

artimon

modf

Ivan8209

Не надо подсказывать, пусть учится использовать apropos.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Yulka-MOl

thx

apl13

надо его округлить _В_МАТЕМАТИЧЕСКОМ_СМЫСЛЕ_
Неохота стандартных функций - пиши n = (int x + 0.5 ) .

Yulka-MOl

Ну я всегда так и писал, а вот теперь задумался о том какое безобразие творю

ppplva

имхо, вполне нормальный способ

Sharp

Гуглом научить пользоваться?

salamander

Но только для неотрицательных чисел. Иначе:
x = -1.1;
n = (intx + 0.5);
printf(">%d\n",n); //>0
А вообще, if-ом наверное быстрее всего будет.
if(x<0) n = (intx-0.5); else n = (intx+0.5);

Realist

Тогда уж лучше ?:

(x<0) ? static_cast<int>(x-0.5) : static_cast<int>(x+0.5);

ilmarvolken

стандартная функция round
вот на дельфи
procedure TForm1.FormCreate(Sender: TObject);
var
S, T: string;
begin
Str(1.4:2:1, T);
S := T + ' rounds to ' + IntToStr(Round(1.4 + #13#10;
Str(1.5:2:1, T);
S := S + T + ' rounds to ' + IntToStr(Round(1.5 + #13#10;
Str(-1.4:2:1, T);
S := S + T + ' rounds to ' + IntToStr(Round(-1.4 + #13#10;
Str(-1.5:2:1, T);
S := S + T + ' rounds to ' + IntToStr(Round(-1.5;
MessageDlg(S, mtInformation, [mbOk], 0);
end;
Оставить комментарий
Имя или ник:
Комментарий: