Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Сведение чисел после запятой до сотых   Найти похожие ветки 

 
DimChan ©   (2003-10-08 10:40) [0]

Уважаемые, помогите или подскажите как из m:= "123,1234" получить m:="123,12", вот как попробовал я:

var x,y : integer;
Begin
x := strtoint(m) * 100;
y := int(x);
x := (x-y)/100;
m := IntToStr(x);
end;

Но все тщетно, и еще буду очень благодарен за функцию которая определяет последнее значение m!


 
Anatoly Podgoretsky ©   (2003-10-08 10:42) [1]

Delete(M,Length(m)-2,2)

s := M


 
Skier ©   (2003-10-08 10:44) [2]

x := (x-y)/100; и Delphi такое компилит ?


 
Плохиш_   (2003-10-08 10:49) [3]

>Skier © (08.10.03 10:44) [2]

В смысле?

>DimChan © (08.10.03 10:40)

StrToFloat, FloatToStrF + F1


 
DimChan ©   (2003-10-08 11:03) [4]


> Плохиш_ (08.10.03 10:49) [3]
> StrToFloat, FloatToStrF + F1

Я чего-то не пойму к чему это, может я что-то не так делаю?


 
ZEE ©   (2003-10-08 11:04) [5]

var x,y : integer;
...
x := strtoint(m) * 100;
y := int(x);
x := (x-y)/100;
Дельфя в целый тип дробь не пропустит...

и еще
m:= "123,1234";
x := strtoint(m) * 100;
не пройдет если DecimalSeparator="."


 
Brahman ©   (2003-10-08 11:05) [6]

DimChan © (08.10.03 10:40)

Прежде всего, Вам имеет смысл почитать о формах представления чисел в компьютерах.
Еще четко для себя разделить - компьютерное и визуальное представление чисел.

То, что Вы хотите, осуществимо в визуальном (строковом)представлении или в формате BCD.


 
Bel ©   (2003-10-08 11:05) [7]

> Плохиш_ (08.10.03 10:49) [3]
> В смысле?

Результат выражения (x-y)/100 - вещественный, а х - целое.


 
ZEE ©   (2003-10-08 11:07) [8]

дополнительно к [5]
что-то я не то написал
m:="123,1234";
x:=strtoint(m)*100;
это вообще не пройдет в любом случае
в strtoint запятая ну очень мешает...


 
Song ©   (2003-10-08 11:15) [9]

FormatFloat()


 
Плохиш_   (2003-10-08 11:17) [10]

>Bel © (08.10.03 11:05) [7]

Хм ... действительно ограничение :-) мог бы и округлить =)
никогда не пользовался.


 
DimChan ©   (2003-10-08 12:09) [11]


> Song © (08.10.03 11:15) [9]
> FormatFloat()


Я попробовал
Mproba.text := FormatFloat ("#,##0,00", num);

но требует : Incompatible types: "Extended" and "String"


 
Mystic ©   (2003-10-08 12:09) [12]

Из модуля Math:

function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
var
LFactor: Double;
begin
LFactor := IntPower(10, ADigit);
Result := Round(AValue / LFactor) * LFactor;
end;

function SimpleRoundTo(const AValue: Double; const ADigit: TRoundToRange = -2): Double;
var
LFactor: Double;
begin
LFactor := IntPower(10, ADigit);
Result := Trunc((AValue / LFactor) + 0.5) * LFactor;
end;


 
ZEE ©   (2003-10-08 12:11) [13]

> DimChan © (08.10.03 12:09) [11]
> Я попробовал
> Mproba.text := FormatFloat ("#,##0,00", num);
> но требует : Incompatible types: "Extended" and "String"
так ты наверняка в num строку запихиваешь, а надо число


 
DimChan ©   (2003-10-08 12:49) [14]


> ZEE © (08.10.03 12:11) [13]


> так ты наверняка в num строку запихиваешь, а надо число


Конечно ты прав! Поэтому я:

Var x:Variant;
Begin
...
x := Num;
Mproba.text := FormatFloat ("0.00", x);


но, есть проблема - FormatFloat округляет число в большую сторону, если num := "123,456" ,то на выходе дает "123,46", а мне надо "123,45"...


 
ZEE ©   (2003-10-08 13:06) [15]

> DimChan © (08.10.03 12:49) [14]
> но, есть проблема - FormatFloat округляет число в большую
> сторону, если num := "123,456" ,то на выходе дает "123,46",
> а мне надо "123,45"...
тогда надо только со строками работать: Pos(), SetLength()...


 
DimChan ©   (2003-10-08 13:16) [16]


> ZEE © (08.10.03 13:06) [15]
> тогда надо только со строками работать: Pos(), SetLength()...

Может ты и прав, тогда может кто подскажет как удалять ненужные символы, или хотя бы где на это можно взглянуть...


 
ZEE ©   (2003-10-08 13:19) [17]

примерно так:
var s:string;
i:integer;
...
s:="123,1234";
i:=pos(",",s);
if (i>0)and(length(s)>i+2) then
begin
SetLength(s,i+2);
end;

можешь еще доработать чтоб нолики добавляло если после запятой нехватает :)


 
DimChan ©   (2003-10-08 13:54) [18]


> ZEE ©
> SetLength(s,i+2);


Я так понял это длинна s, но программа ругается:

Constant object cannot be passed as var parameter


 
DimChan ©   (2003-10-08 14:37) [19]

Слушай, а у Edit есть возможность задать маску ввода ?


 
ZEE ©   (2003-10-08 15:12) [20]

SetLength - это задание длины у строки - в него нельзя запихивать константу или ридонли св-во (наверно пишешь SetLength(Edit1.Text,i+2); - низя)


 
ZEE ©   (2003-10-08 15:13) [21]

> DimChan © (08.10.03 14:37) [19]
> Слушай, а у Edit есть возможность задать маску ввода?
для этого есть TMaskEdit



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
3-65351
konst
2003-09-29 12:29
2003.10.20
сортировка Query


11-65404
SPeller
2003-01-31 05:11
2003.10.20
Баг с кнопками


1-65515
PigMey
2003-10-07 20:35
2003.10.20
Обхект и метод Free


1-65538
TUser
2003-10-08 09:36
2003.10.20
header


1-65418
deivan
2003-09-21 22:23
2003.10.20
TImage