Как сделать округление в делфи
Загрузка. Пожалуйста,
подождите.
Народ, как в Delphi при делении округлять до сотых в большую сторону ?
допустим срока
var
a:real;
begin
a:=(Strtoint(Edit1.text))/3;
Edit2.text:=Floattostr(a);
end;
Получилось число 2.5678998776 округлить нужно до 2.57
Репутация: нет
Всего: 62
Если речь идет именно о сотых, то сначала умножаем 2.5678998776 на 100, затем вызываем Round, который округляет до ближайшего целого, потом делим на 100, преобразуем в строку и выводим.
Репутация: нет
Всего: 118
function RoundUp(X: Extended): Extended;
begin
Result := Trunc(X) + Trunc (Frac(X) * 2);
end;
Народ что сделать нужно в моём примере с Round и параметром "a" чтобы округлял в большую сторону ? Я не знаю как пользоватся Roundом . скажите PLZ
Репутация: нет
Всего: 118
Возможно, я не прав, но если уж программировать приходится, то интересно все-таки подумать самому.
Ну к плавающему типу только Round надо привести. И все таки читайте документацию - RTFM.
Репутация: 2
Всего: 60
Цитата |
var a:real; begin a:=(Strtoint(Edit1.text))/3; Edit2.text:=Floattostr(a); end; |
Вообще-то все проще: функция есть такая roundto
т.е.
Edit2.text:=Floattostr(roundto(a, -2));
Правда округлит она по правилам округления. Ежли нужно как то по другому округлить, то либо со строками работай либо проверку делай if . then.
Репутация: 48
Всего: 207
До сотых соответственно будет:
Код |
Function RoundMax100(Num:real):real; begin result:=round(num*100+0.5)/100; end; |
Написал Edit2.text:=Floattostr(roundto(a, -2));
[Error] Unit1.pas(71): Undeclared identifier: 'roundto'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
VIT а что такое Uses Math; и где это писать ?
Репутация: 48
Всего: 207
В любом модуле есть конструкция Uses. Поищи и ты найдёшь. Там список модулей которые используются, допиши туда Math (порядок не играет значения - в любое место, через запятую)
Репутация: 2
Всего: 60
Знаешь в Delphi есть такая интересная штука: выделяешь синим (курсором мыши) неизвестную функцию и нажимаешь F1. И.. о чудо открывается хелп с синтаксисом и названием модуля в котором эта функция находится (разумеется если эта ф-ция стандартная), если нет или написана с орфографической ошибкой тогда хелп откроется на оглавлении.
Извини за сарказм, но то, что все функции паскаля записаны в каких-то модулях должен знать даже начинающий программер.
Репутация: 2
Всего: 60
Цитата |
Исходный код |
Репутация: 48
Всего: 207
Проще, но библиотека Math довольно тормознутая и большая, нет большого смысла прикомпиллировать её и использовать если нужна только такая мелочь, впрочем можно конечно и так.
Репутация: 2
Всего: 60
Цитата |
begin result:=round(num*100+0.5)/100; end; |
Извини, но вообще-то я думал, что это опечатка. Как ты округлишь до сотых если переменная num будет иметь больше двух знаков после запятой (я имею ввиду без roundto) а она находится в Math как не крути.
Репутация: 48
Всего: 207
function RoundStr ( Zn: Real ; kol_zn: Integer ) : Real ;
var
snl, s, s0, s1, s2: string ;
n, n1: Real ;
nn, i: Integer ;
begin
s := FloatToStr ( Zn ) ;
if ( Pos ( ',' , s ) > 0 ) and ( Zn > 0 ) and
( Length ( Copy ( s, Pos ( ',' , s ) + 1 , length ( s ) ) ) > kol_zn ) then
begin
s0 := Copy ( s, 1 , Pos ( ',' , s ) + kol_zn - 1 ) ;
s1 := Copy ( s, 1 , Pos ( ',' , s ) + kol_zn + 2 ) ;
s2 := Copy ( s1, Pos ( ',' , s1 ) + kol_zn, Length ( s1 ) ) ;
n := StrToInt ( s2 ) / 100 ;
nn := Round ( n ) ;
if nn >= 10 then
begin
snl := '0,' ;
for i := 1 to kol_zn - 1 do
snl := snl + '0' ;
snl := snl + '1' ;
n1 := StrToFloat ( Copy ( s, 1 , Pos ( ',' , s ) + kol_zn ) ) + StrToFloat ( snl ) ;
s := FloatToStr ( n1 ) ;
if Pos ( ',' , s ) > 0 then
s1 := Copy ( s, 1 , Pos ( ',' , s ) + kol_zn ) ;
end
else
s1 := s0 + IntToStr ( nn ) ;
if s1 [ Length ( s1 ) ] = ',' then
s1 := s1 + '0' ;
Result := StrToFloat ( s1 ) ;
end
else
Result := Zn;
end ;
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;
end ;
Округление дробных чисел с точностью i - количество знаков после запятой, S - дробное число в строковом виде.
function FormatData ( s: String ; i: Integer ) : String ;
Result:= FloatToStr ( Round ( StrToFloat ( s ) * exp ( i* ln ( 10 ) ) ) / ( exp ( i* ln ( 10 ) ) ) ) ;
Как округлять до сотых в большую сторону
// Прибавляешь 0.5 затем округляешь:
function RoundMax ( Num: real ; prec: integer ) : real ;
result := roundto ( num + Power ( 10 , prec - 1 ) * 5 , prec ) ;
// До сотых соответственно будет:
function RoundMax100 ( Num: real ) : real ;
result := round ( num * 100 + 0.5 ) / 100 ;
Округление дробного числа до N знаков после запятой
Автор: Perceptron
function RoundEx ( chislo: double ; Precision: Integer ) : string ;
Str ( ChisloInCurr: 20 : Precision, ChisloInStr ) ;
ChisloInStr [ Pos ( '.' , ChisloInStr ) ] := ',' ;
RoundEx := Trim ( ChisloInStr ) ;
procedure TForm1. Button1Click ( Sender: TObject ) ;
Edit1. Text := RoundEx ( StrToFloat ( Edit1. Text ) , 2 ) ;
c определенной точностью
function Rounder ( var Value: Double ; Decimals: Integer ) : Double ;
var
j: Integer ;
A: Double ;
begin
A := 1 ;
case Decimals of
0 : A := 1 ;
1 : A := 10 ;
else
for j := 1 to Decimals do
A := A * 10 ;
end ;
Result := Int ( ( Value * A ) + 0.5 ) / A;
end ;
procedure TForm1. Button1Click ( Sender: TObject ) ;
var
Value: Double ;
begin
Value := 23.56784 ;
//Result is 23.57
label1. Caption := FloatToStr ( Rounder ( Value, 2 ) ) ;
end ;
<
The function Round of the Delphi doesn't work
like it is usually expected.
The odd numbera are rounded down and the even numbers up.
Example/ Beispiel:
x:= Round(17.5) = x = 18
x:= Round(12.5) = x = 12
>
function DoRound ( const X: Extended ) : Int64 ;
begin
Result := 0 ;
if X0 then
Result := trunc ( X + 0.5 ) ;
if Xthen
Result := trunc ( X - 0.5 ) ;
end ;
procedure TForm1. Button1Click ( Sender: TObject ) ;
begin
ShowMessage ( FormatFloat ( '0.00' , DoRound ( 17.5 ) ) ) ; // - 18
ShowMessage ( FormatFloat ( '0.00' , DoRound ( 12.5 ) ) ) ; // - 13
//This rounds every value to 0.05 steps
//Rundet in 0.05 Schritten
ShowMessage ( FormatFloat ( '0.00' , Round ( 17.22 / 0.05 ) * 0.05 ) ) ; // - 17.20
end ;
<***Another function:***>
function RoundUp ( Value: Extended ) : Int64 ;
procedure Set8087CW ( NewCW: Word ) ;
asm
MOV Default8087CW,AX
FNCLEX
FLDCW Default8087CW
end ;
const
RoundUpCW = $1B32 ;
var
OldCW: Word ;
begin
OldCW := Default8087CW;
try
Set8087CW ( RoundUpCW ) ;
Result := Round ( Value ) ;
finally
Set8087CW ( OldCW ) ;
end ;
end ;
procedure TForm1. Button2Click ( Sender: TObject ) ;
begin
ShowMessage ( FormatFloat ( '0.00' , RoundUp ( 19.32 ) ) ) ; // - 19
end ;
Типы вычислений, выполняемых в Delphi для данных числового типа, можно разделить на несколько категорий, которые представлены ниже.
Операции присвоения в Delphi
Они используются для определения значения данных. В дополнение к непосредственному вводу значения в память, занятую переменной, используя ее адрес, стандартный метод присваивания заключается в использовании соответствующего оператора, как показано в примере:
Логические операции: побитовые в Delphi
Они используются для обработки данных в виде набора битов. Каждый из битов рассматривается как независимая единица, и его изменение не влияет на другие биты данных.
Символ операции | Краткое описание | Пример |
Not | Битовый Отрицание | x:=not $FFFFFF00; |
And | Битовый Логический И | x:=3 and 6; |
Or | Битовый Логический Или | x:=3 or 6; |
Xor | Битовый Исключение | x:=3 xor 6; |
Shl | Битовый Сдвиг Влево | x:=3 shl 2; |
Shr | Битовый Сдвиг Вправо | x:=12 shr 2; |
Логические операции: сравнения в Delphi
Они используются для проверки, выполняется ли данное условие или нет. Это особый вид логических операций, поскольку они работают с данными, но возвращают логические значения. Допускаются следующие действия сравнения:
Символ операции | Краткое описание | Пример |
= | Равно | B:=(1=1); |
Больше | B:=(1>-1); | |
> = | Больше или Равно | B:=(1>=-1); |
Простые арифметические операции в Delphi
Они используются для манипулирования данными как определенным значением с использованием языковых операторов.
Символ операции | Краткое описание | Пример |
+ | Прибавление | x:=1+2.3; |
— | Вычитание | x:=1-3.3; |
* | Умножение | x:=2*3.4; |
Div | Целочисленное деление | x:=5 div 3; |
Mod | Остаток от целочисленного деления | x:=18 mod 4; |
/ | Деление | x:=7 / 2; |
Арифметические функции в Delphi
Они используются для обработки данных как определенного значения с использованием функций, реализованных в библиотеках. Основные операции перечислены ниже:
Функция | Краткое описание | Пример записи |
Inc | Увеличение (увеличение на 1 или на N) | Inc(X); Inc(X,N); |
Dec | Уменьшение (уменьшение на 1 или на N) | Dec(X); Dec(X,N); |
Abs | Абсолютное значение | Abs(X); |
Int | Целая часть действительного числа | Int(X); |
Frac | Дробная часть действительного числа | Frac(X); |
Sqr | Возвращает квадрат числа | Sqr(X); |
Sqrt | Возвращает квадратный корень числа | Sqrt(X); |
Power | Возводит в степень | Power(X, Y); |
Ln | Натуральный логарифм | Ln(X); |
LnXP1 | Натуральный логарифм для X + 1 | LnXP1(X); |
Log2 | Двоичный логарифм | Log2(X); |
Log10 | Десятичный логарифм | Log10(X); |
LogN | Логарифм от X по основанию B | LogN(B, X); |
Exp | Экспонента | Exp(X); |
Ldexp | X*2P | Ldexp(X,P); |
Hi | Старший байт | Hi(X); |
Lo | Младший байт | Lo(X); |
Sign | Знак. Значение зависит от знака аргумента (-1 для X 0) | Sign(X); |
Round | Математическое округление | Round(X); |
Trunc | Преобразование действительного числа в целое число. Возвращает целую часть. | Trunc(X); |
Floor | Округление до наибольшего целого, меньшего или равного аргумента | Floor(X); |
Ceil | Округление до наименьшего целого | Ceil(X); |
Max | Из двух приведенных чисел возвращается большее | Max(X, Y); |
Min | Из двух приведенных чисел возвращает меньшее | Min(X, Y); |
MaxValue | Из массива чисел возвращает наибольшее | MaxValue (массив); |
MinValue | Из массива чисел возвращает наименьшее | MinValue (массив); |
MaxIntValue | Из массива целых чисел возвращает наибольшее | MaxIntValue (массив); |
MinIntValue | Из числа целых чисел возвращает наименьшее | MinIntValue (массив); |
Сложные операции в Delphi
Они используются для вычисления выражений посредством множества действий, выполняемых со многими данными. Примеры ниже:
Язык программирования Delphi на данный момент широко применяется для создания приложений под операционную систему Windows и не только. Знание округления чисел в данном языке является обязательной частью его освоения.
- Как округлить число в delphi
- Как построить график в Делфи
- Как округлить число до сотых
Округлите число в Delphi до нужного количества знаков после запятой при помощи следующей функции. В данном случае вместо x пропишите ваше дробное число, но в строчном варианте, а вместо y – необходимое число знаков после запятой.
Если вам не удобен предыдущий способ, воспользуйтесь альтернативным методом округления дробных чисел до нужного количества знаков после запятой. Оба эти метода могут быть применены в зависимости от вашего предпочтения или исходя из данных обстоятельств.
В случае возникновения каких-либо вопросов, связанных с использованием функций языка программирования Delphi, обратитесь к справочной литературе или к источникам информации в интернете. Если вы недавно начали программировать на данном языке, прочитайте литературу Нила Рубенкинга для начинающих, в ней наиболее доходчиво и понятно изложены все аспекты, касающиеся введения в курс изучения Delphi.
При выборе компилятора для языка Delphi воспользуйтесь параметрами исходной ситуации, в зависимости от нее выберите подходящее программное обеспечение. Самым распространенным и наиболее удобным в использовании считается программа Embarcadero Delphi, однако, не стоит останавливать внимание только на нем, существуют и более удобные в некотором отношении компиляторы. Также некоторые из них были специально разработаны под операционные системы GNU Linux, несмотря на то, что в данные момент Delphi поддерживает в основном платформ Microsoft. NET.
Читайте также: