Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

20-значная цифра [D7, WinXP]


aidyn ©   (2008-05-26 13:10:00) 

у меня есть строковая переменная, состоящая из 20 цифр... с этим значением мне надо провести арифметические операции, но вот столкнулся с проблемой конвертации... Integer такое огромное значение не принимает, пробовал ставить Extended, но тогда при конвертации StrToFloat почему-то получается 0...
Подскажите что делать?


Romkin   (2008-05-28 11:59:00) [1]

Вот почему никто не вспоминает о TBCD?
Ведь есть, 31 знак.
var
 A, B: Variant;
begin
 A := VarFMTBcdCreate('12555645345',30,0);
 B := VarFMTBcdCreate('234234423423434352345345',30,0);
 B := B + A;
 ShowMessage(B.AsString);
end;


Ega23   (2008-05-28 09:55:00) [2]

FGInt, и нефиг велосипед изобретать...


inoremap   (2008-05-28 09:44:00) [3]

http://kladovka.net.ru/index.cgi?pid=list&rid=459


KSergey   (2008-05-28 08:05:00) [4]

> Рамиль ©   (27.05.08 10:04) [9]
> Может лучше массивом из байт, а не строками. Зачем тратить
> время на конвертацию?

По-моему, эффективнее будет хранить в виде рекордов из интов и работать в частями рекорда как с целыми числами (расширяя временно до int64, например, не забывая при этом учитывать переносы между частями. Это много быстрее будет, я думаю, если скорость хоть сколько-нибудь важна, конечно.

Хотя, понятно, для этого уже написаны готоыве библиотеки :)


Slym   (2008-05-28 04:34:00) [5]

FGInt


Style   (2008-05-27 11:46:00) [6]


> Только $31 и $1 не одно и тоже, и тем более если если эти
> байты Integer, а не BCD


естесно, имеется ввиду преобразование одного символа из строки в byte, вернее даже в type TDigit = 0..9


Anatoly Podgoretsky   (2008-05-27 11:38:00) [7]

Только $31 и $1 не одно и тоже, и тем более если если эти байты Integer, а не BCD


DiamondShark   (2008-05-27 11:32:00) [8]


> Может лучше массивом из байт, а не строками. Зачем тратить
> время на конвертацию?

Какое время? Ничего никуда не конвертируется.
Символы цифр -- это такие же байты как любые другие.


Style   (2008-05-27 11:31:00) [9]

а че там конвертировать то
ord(data[pos])-$30


Рамиль   (2008-05-27 10:04:00) [10]

Может лучше массивом из байт, а не строками. Зачем тратить время на конвертацию?


Gadenysh   (2008-05-27 08:16:00) [11]

приводить посимвольно к integer (5 пишем один в уме)
как сказали, второй класс


aidyn   (2008-05-27 07:42:00) [12]


> При желании можно выполнять арифметические операции над
> строковыми представлениями чисел любой длины.

А как прводить арифметические операции над строков. переменными? подскажите плиз


tesseract   (2008-05-26 21:46:00) [13]


>  арифметические операции над строковыми представлениями
> чисел любой длины.


Numeric, таки работает, имееться в виду ?


Denis__   (2008-05-26 19:37:00) [14]


> Dimka Maslov ©   (26.05.08 15:59) [4]

Полностью согласен. И делается не так уж и сложно!


Dimka Maslov   (2008-05-26 15:59:00) [15]

Школа. 2 класс. Сложение, вычитание, умножение и деление в столбик. При желании можно выполнять арифметические операции над строковыми представлениями чисел любой длины.


aidyn   (2008-05-26 15:50:00) [16]

Вот именно, что аппетиты снизить не могу :), наоборот после некоторых операций цифра должна увеличиться до 22 знаков.


Anatoly Podgoretsky   (2008-05-26 13:34:00) [17]

Если аппетиты снизишь до 19 знаков, то Int64 дает 9 223 372 036 854 775 807


Stas   (2008-05-26 13:28:00) [18]

Нужна спец. библиотека, типа как эта http://gmplib.org/
незнаю к Delphi можно подключить или нет


Наверх

Титульная страница Поиск, карта сайта Написать письмо