|
|
#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
|
||||
|
||||
Попробовал.. ничего не изменилось.
В принципе - для удобства просмотра.. но потом надо будет реализовать запись в файл.. и туда надо будет писать тоже уже округлённые значения. Так что.. неплохо было бы сами числа сделать таковыми.. (( Ума не приложу в чём может быть дело. ( |