Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
1-65430
slap
2003-10-09 09:56
2003.10.20
TDateTime и TTime


14-65596
blackweber
2003-10-01 12:24
2003.10.20
win 2000 server registry


3-65340
Serhij H.
2003-09-29 17:22
2003.10.20
Вставка специальных символов


3-65331
Fast
2003-09-30 09:01
2003.10.20
Формат времени в запросе


1-65452
TUser
2003-10-09 10:10
2003.10.20
WebBr





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский