-
у меня есть строковая переменная, состоящая из 20 цифр... с этим значением мне надо провести арифметические операции, но вот столкнулся с проблемой конвертации... Integer такое огромное значение не принимает, пробовал ставить Extended, но тогда при конвертации StrToFloat почему-то получается 0...
Подскажите что делать?
-
Нужна спец. библиотека, типа как эта
http://gmplib.org/ незнаю к Delphi можно подключить или нет
-
Если аппетиты снизишь до 19 знаков, то Int64 дает 9 223 372 036 854 775 807
-
Вот именно, что аппетиты снизить не могу :), наоборот после некоторых операций цифра должна увеличиться до 22 знаков.
-
Школа. 2 класс. Сложение, вычитание, умножение и деление в столбик. При желании можно выполнять арифметические операции над строковыми представлениями чисел любой длины.
-
> Dimka Maslov © (26.05.08 15:59) [4]
Полностью согласен. И делается не так уж и сложно!
-
> арифметические операции над строковыми представлениями
> чисел любой длины.
Numeric, таки работает, имееться в виду ?
-
> При желании можно выполнять арифметические операции над
> строковыми представлениями чисел любой длины.
А как прводить арифметические операции над строков. переменными? подскажите плиз
-
приводить посимвольно к integer (5 пишем один в уме)
как сказали, второй класс
-
Может лучше массивом из байт, а не строками. Зачем тратить время на конвертацию?
-
а че там конвертировать то
ord(data[pos])-$30
-
> Может лучше массивом из байт, а не строками. Зачем тратить
> время на конвертацию?
Какое время? Ничего никуда не конвертируется.
Символы цифр -- это такие же байты как любые другие.
-
Только $31 и $1 не одно и тоже, и тем более если если эти байты Integer, а не BCD
-
> Только $31 и $1 не одно и тоже, и тем более если если эти
> байты Integer, а не BCD
естесно, имеется ввиду преобразование одного символа из строки в byte, вернее даже в type TDigit = 0..9
-
FGInt
-
> Рамиль © (27.05.08 10:04) [9]
> Может лучше массивом из байт, а не строками. Зачем тратить
> время на конвертацию?
По-моему, эффективнее будет хранить в виде рекордов из интов и работать в частями рекорда как с целыми числами (расширяя временно до int64, например, не забывая при этом учитывать переносы между частями. Это много быстрее будет, я думаю, если скорость хоть сколько-нибудь важна, конечно.
Хотя, понятно, для этого уже написаны готоыве библиотеки :)
-
-
FGInt, и нефиг велосипед изобретать...
-
Вот почему никто не вспоминает о TBCD?
Ведь есть, 31 знак.
var
A, B: Variant;
begin
A := VarFMTBcdCreate('12555645345',30,0);
B := VarFMTBcdCreate('234234423423434352345345',30,0);
B := B + A;
ShowMessage(B.AsString);
end;