PDA

Просмотр полной версии : как выделить целое?



Jeck
24.12.2008, 19:50
подскажите, как выделить целое из реального числа. не округлить, а именно целое.
пример 27,42 -> 27 или 65,98 -> 65.

Филоненко Владислав
24.12.2008, 20:42
a: real; Исходное число
b: DINT; результат

код:

b:=REAL_TO_DINT(a);
if (a>=0) then
if (DINT_TO_REAL(b)>a) then
b:=b-1;
end_if
else
if (DINT_TO_REAL(b)<a) then
b:=b+1;
end_if
end_if



Вот так правильнее при отриц. числах

Jeck
24.12.2008, 20:43
филоненко владислав, спасибо.

Jeck
24.12.2008, 22:26
ток с отрицательными пришлось переделать...
b:=REAL_TO_DINT(a);
if (DINT_TO_REAL(b)>a) and b>0 then
b:=b-1;
end_if
if (DINT_TO_REAL(b) < a ) and b<0 then
b:=b+1;
end_if
ps пордон не увидел. страницу не обновлял....
еще раз спасибо за идею.

Игорь Петров
25.12.2008, 11:07
а чем оператор Trunc не подходит?

Jeck
25.12.2008, 18:46
игорь петров, очень даже подходит! ток я про него не сном, не духом. спасибо за наводку.

Роман26
13.02.2009, 10:48
REAL_TO_INT округляет до ближайшего целого, а TRUNC извлекает целое.

А подскажите пожалуйста, как округлить число до одного знака после запятой? К примеру:
26.83781 -> 26.8
26.88781 -> 26.9

Anis
13.02.2009, 12:19
Умножить на 10 > взять целое > разделить на 10.

Роман26
13.02.2009, 13:18
Большое спасибо! Отличная идея!)

Okmor
01.06.2011, 17:47
out:=INT_TO_REAL(REAL_TO_INT((t-TRUNC(t))*10))/10+TRUNC(t);

Gans
01.06.2011, 21:07
Посмотрите пример во вложении и незабываем, что преобразование типов данных делает процессор, а не человек!!!;)

Gans
02.06.2011, 16:27
Боюсь даже сказать, что эту функцию можно одной строчкой... :)
Вам в этом вопросе безусловно верю!!!;)
Спасибо от начинающих за
5 / 2 <> 5.0 / 2 сам пару лет назад с таким разбирался.