![]() |
|
|
|
|
#1
|
||||
|
||||
|
Ума не приложу в чём дело...
Есть функция (с форума): Код:
function RoundEx(X: Double; Precision: Integer ): Double;
{
Precision :
1 - до целых
10 - до десятых
100 - до сотых
...
}
var
ScaledFractPart, Temp: Double;
begin
ScaledFractPart := Frac(X) * Precision;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if Temp >= 0.5 then
ScaledFractPart := ScaledFractPart + 1;
if Temp <= -0.5 then
ScaledFractPart := ScaledFractPart - 1;
RoundEx := Int(X) + ScaledFractPart / Precision;Затем... Такой вот строчкой всё зашибись как работает: Код:
RoundEx(0.123456789, 100000); А вот такой вот комбинацией в цикле в своей проге пишу: Код:
SuprD[i]:=RoundEx((0.1*Scpp[i]/D),100000);
ShowMessage(FloatToStr(SuprD[i])); |
|
#2
|
||||
|
||||
|
а может попробуешь это:
Delphi7 help: Delphi syntax: PHP код:
PHP код:
![]() |
|
#3
|
||||
|
||||
|
Код:
SuprD[i]:=(0.123456789);
SuprD[i]:=RoundTo((SuprD[i]),-5);
ShowMessage(FloatToStr(SuprD[i]))Код:
SuprD[i]:=(0.123456789);
ShowMessage(FloatToStr(RoundTo((SuprD[i]),-5)));----- ...мда.. и чего делать? (( |
|
#4
|
||||
|
||||
|
если SuprD : array of real;
то возможна ошибка округления при переводе из function RoundTo(...): Double; |
|
#5
|
||||
|
||||
|
попробуй для хранения использовать Double или Currency(наиболее точное хранение чисел если диапазон устраивает)
кстати если округляешь для удобства просмотра то можно использовать функцию Format для преобразования в строку Format('%8.2f', [123.456]); Последний раз редактировалось s0Creator, 03.03.2008 в 13:36. |
|
#6
|
||||
|
||||
|
Попробовал.. ничего не изменилось.
В принципе - для удобства просмотра.. но потом надо будет реализовать запись в файл.. и туда надо будет писать тоже уже округлённые значения. Так что.. неплохо было бы сами числа сделать таковыми.. (( Ума не приложу в чём может быть дело. ( |