var
s: String;
const
digit: string[16]='0123456789ABCDEF';
begin
s:='';
repeat
s:=digit[(n mod radix)+1]+s;
n:=n div radix;
until n=0;
FromDec:=s;
end;
в FAQ нашел код для перевода только целых чисел, а как быть с дробными ?
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
s3ct |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код function FromDec(n, radix:longint):string; var s: String; const digit: string[16]='0123456789ABCDEF'; begin s:=''; repeat s:=digit[(n mod radix)+1]+s; n:=n div radix; until n=0; FromDec:=s; end; в FAQ нашел код для перевода только целых чисел, а как быть с дробными ? |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ищи в поиске (в разделе Дельфи), там точно был рабочий код... По-моему, тема называлась "Калькулятор", или что-то типа этого...
|
s3ct |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код function ToDec(n:string; radix:longint):real; var _int: longint; _frac: real; s: string; i, p: byte; const digit: string[16]='0123456789ABCDEF'; begin p := pos('.', n); if p = 0 then s := n else s := copy(n, 1, p - 1); _int := 0; _frac := 0.0; while s[1] = '0' do delete(s, 1, 1); for i := 1 to length(s) do _int := _int * radix + pos(n[i], digit) - 1; if (p <> 0) and (p < length(n)) then begin // <--- Здесь !!! s := copy(n, p + 1, 255); while s[length(s)] = '0' do delete(s, length(s), 1); for i := 1 to length(s) do _frac := _frac + 1 / stepen(radix, i); end; ToDec := _int + _frac; end; Нашел только ToDec, помогите модифицировать ее в FromDec ![]() ![]() ![]() Сообщение отредактировано: s3ct - |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Это - неверный вариант... Верный приведен здесь:
Калькулятор Цитата(s3ct @ 27.05.2006 19:44) Нашел только ToDec, помогите модифицировать ее в ToDec ![]() |
s3ct |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Исправил
![]() |
antonioSP |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот мой вариант fromdec, вроде потестил работает нормально:
function FromDec(n:real; radix:longint):string;
var
q:real;
i,j:integer;
s,f,u: String;
const
digit: string[16]='0123456789ABCDEF';
begin
u:='';
if n<0 then
begin
u:='-';
n:=abs(n);
end;
if frac(n)>0 then
begin
i:=0;
q:=frac(n);
s:='';
j:=strtoint(floattostr(int(n)));
repeat
s:=digit[(j mod radix)+1]+s;
j:=j div radix;
until j=0;
repeat
q:=frac(q)*radix;
f:=f+digit[trunc(q)+1];
q:=frac(q);
i:=i+1;
until (q=0)or(i=8);;
FromDec:=s+','+f;
end
else
begin
s:='';
j:=trunc(n);
repeat
s:=digit[(j mod radix)+1]+s;
j:=j div radix;
until j=0;
FromDec:=u+s;
end;
end;
|
![]() ![]() |
![]() |
Текстовая версия | 15.04.2025 19:22 |