- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
function Okruglenije(cislo: Currency; skolkonulei: Integer): string;
var
outs: string;
rst, cel, zn: string;
p: integer;
begin
outs := FloatToStr(cislo);
p := Pos(',', outs) + 1;
zn := Copy(outs, p, skolkonulei);
cel := FloatToStr(trunc(cislo));
if p > 1 then
rst := Trim(cel + ',' + zn)
else
rst := Trim(cel);
Okruglenije := rst;
end;
Soul_re@ver 04.01.2014 10:39 # 0
ka3ax 04.01.2014 11:04 # 0
var a: single,b: string;
begin
b:=Okruglenije(a,2);
end;
-------------------------------------
b = 102,32 (string)
Soul_re@ver 04.01.2014 11:05 # +2
bormand 04.01.2014 11:31 # 0
TarasB 07.01.2014 20:42 # +4
bormand 07.01.2014 20:45 # 0
anonimb84a2f6fd141 08.01.2014 07:57 # 0
bormand 08.01.2014 08:38 # 0
kegdan 08.01.2014 08:47 # +1
Delphi Style
Oppa Delphi Style
Delphi Style
Oppa Delphi Style
roman-kashitsyn 08.01.2014 13:03 # 0
"Сислоу" - отличное название для компании.
murder 17.01.2014 09:37 # 0
ka3ax 04.01.2014 11:53 # 0
var
outs: string;
rst, cel, zn: string;
l,p: integer;
begin
outs := FloatToStr(cislo);
p := Pos(',', outs) + 1;
zn := Copy(outs, p, skolkonulei);
cel := FloatToStr(trunc(cislo));
if p > 1 then
rst := Trim(cel + ',' + zn)
else
rst := Trim(cel);
if Copy(rst,Length(rst),1)=',' then rst:=StringReplace(rst,',','',[rfReplaceAll, rfIgnoreCase]);
Okruglenije := rst;
end;
Lure Of Chaos 04.01.2014 11:32 # 0
охуж эти долбо... студенты
bormand 04.01.2014 11:53 # 0
В делфи, кстати, если мне не изменяет память, было что-то типа RoundTo, котрое округляет до нужного знака. Ну и аналог printf'а вроде был, на случай если нужна сразу строка с нужным количеством знаков...
inkanus-gray 04.01.2014 15:00 # +1
inkanus-gray 04.01.2014 15:10 # 0
TarasB 07.01.2014 20:44 # 0
да, задача усложняется
bormand 07.01.2014 20:45 # 0
А кто у нас главный дельфин, который должен это знать? :)
ka3ax 04.01.2014 11:54 # +2
Stertor 04.01.2014 15:20 # 0
Ага, по принципу "слышал звон"... Зачем вообще лезть в число строковыми функциями - ума не приложу, и еще это :
У нас вот в школоло, конкретно в кабинете информатики, много лет висела таблица с операторами Бейсика - не Q, а именно VB: ни препод, ни школьники(в том числе и Ваш покорный слуга) не имели ни малейшего понятия, что есьм Бейсик, и зачем эта таблица вообще нужна. Зато уже много лет после выпуска я пришел к другу в школку, случайно узнал таблицу, и сразу отвернулся - Бейсик был уже в прошлом.
inkanus-gray 04.01.2014 15:44 # 0
Здесь же другая ситуация: Currency — это не BCD, а двоичное число, которое при интерпретации делится на 10000. Т. е. при преобразовании в строку умножения/деления будут, но пока мы не выходим за рамки диапазона преобразования будут точными.
Главное при промежуточных вычислениях не использовать обычные целочисленные и вещественные типы, потому что в них большие значения могут не влезть (в Int64 и в мантиссе Extended столько же бит, сколько в Currency, но там из-за умножения/деления на 10000 может быть потеря последних знаков).
Stertor 04.01.2014 15:52 # +1
(
inkanus-gray 04.01.2014 15:56 # +1
crastinus 04.01.2014 16:08 # 0
kegdan 04.01.2014 16:12 # +1
crastinus 04.01.2014 16:18 # 0
kegdan 04.01.2014 16:43 # +1
TarasB 07.01.2014 20:43 # 0
kegdan 04.01.2014 16:11 # 0
bormand 04.01.2014 16:27 # 0
Ну а для округления до десятков, сотен и т.п. - по методу inkanus-gray (Math.Round(x / d_skolkoNulej) * d_skolkoNulej). Math.Round не хочет отрицательную точность принимать ;(
P.S. decimal, а не double, чтобы соответствовало коду ОП'а.
kegdan 04.01.2014 16:54 # +1
bormand 04.01.2014 17:16 # 0
Ну а если уж пишем - то только ради того, чтобы она понимала отрицательный precision. -2 - округление до сотен, -1 - до десятков и т.п.
kegdan 04.01.2014 17:25 # 0
До какого знака вообще.
bormand 04.01.2014 17:27 # 0
kegdan 04.01.2014 17:30 # 0
kegdan 04.01.2014 17:07 # 0
kegdan 04.01.2014 17:14 # 0
bormand 04.01.2014 17:18 # +1
Эээ...
kegdan 04.01.2014 17:34 # −2
anonimb84a2f6fd141 04.01.2014 23:13 # +2
ka3ax 04.01.2014 23:34 # 0
anonimb84a2f6fd141 04.01.2014 23:47 # −2
Stertor 05.01.2014 00:43 # −1
anonimb84a2f6fd141 05.01.2014 01:04 # −10
Stertor 05.01.2014 01:08 # −1
anonimb84a2f6fd141 05.01.2014 01:38 # −13
anonimb84a2f6fd141 05.01.2014 01:39 # −14
anonimb84a2f6fd141 05.01.2014 01:39 # −14
anonimb84a2f6fd141 05.01.2014 01:39 # −14
anonimb84a2f6fd141 05.01.2014 01:48 # −13
anonimb84a2f6fd141 05.01.2014 02:12 # −14
anonimb84a2f6fd141 05.01.2014 01:46 # −14
anonimb84a2f6fd141 05.01.2014 01:47 # −15
anonimb84a2f6fd141 05.01.2014 01:46 # −15
anonimb84a2f6fd141 05.01.2014 01:48 # −18
anonimb84a2f6fd141 05.01.2014 01:46 # −23
anonimb84a2f6fd141 05.01.2014 01:48 # −26
anonimb84a2f6fd141 05.01.2014 01:46 # −29
anonimb84a2f6fd141 05.01.2014 01:46 # −31
anonimb84a2f6fd141 05.01.2014 01:48 # −31
anonimb84a2f6fd141 05.01.2014 01:46 # −35
anonimb84a2f6fd141 05.01.2014 01:48 # −40
anonimb84a2f6fd141 05.01.2014 01:46 # −41
anonimb84a2f6fd141 05.01.2014 01:48 # −42
anonimb84a2f6fd141 05.01.2014 01:47 # −44
anonimb84a2f6fd141 05.01.2014 01:48 # −45
anonimb84a2f6fd141 05.01.2014 01:47 # −45
anonimb84a2f6fd141 05.01.2014 01:48 # −45
anonimb84a2f6fd141 05.01.2014 01:47 # −44
anonimb84a2f6fd141 05.01.2014 01:49 # −44
anonimb84a2f6fd141 05.01.2014 01:47 # −44
anonimb84a2f6fd141 05.01.2014 01:49 # −45
anonimb84a2f6fd141 05.01.2014 01:47 # −44
anonimb84a2f6fd141 05.01.2014 01:49 # −44
anonimb84a2f6fd141 05.01.2014 01:47 # −40
anonimb84a2f6fd141 05.01.2014 01:49 # −42
anonimb84a2f6fd141 05.01.2014 01:47 # −45
anonimb84a2f6fd141 05.01.2014 01:49 # −44
anonimb84a2f6fd141 05.01.2014 01:51 # −43
anonimb84a2f6fd141 05.01.2014 01:51 # −38
murder 17.01.2014 09:41 # 0
А если в системе в региональных стандартах в качестве разделителя указана точка?