Конференция "Основная" » 20-значная цифра [D7, WinXP]
 
  • aidyn (26.05.08 13:10) [0]
    у меня есть строковая переменная, состоящая из 20 цифр... с этим значением мне надо провести арифметические операции, но вот столкнулся с проблемой конвертации... Integer такое огромное значение не принимает, пробовал ставить Extended, но тогда при конвертации StrToFloat почему-то получается 0...
    Подскажите что делать?
  • Stas © (26.05.08 13:28) [1]
    Нужна спец. библиотека, типа как эта http://gmplib.org/
    незнаю к Delphi можно подключить или нет
  • Anatoly Podgoretsky © (26.05.08 13:34) [2]
    Если аппетиты снизишь до 19 знаков, то Int64 дает 9 223 372 036 854 775 807
  • aidyn (26.05.08 15:50) [3]
    Вот именно, что аппетиты снизить не могу :), наоборот после некоторых операций цифра должна увеличиться до 22 знаков.
  • Dimka Maslov © (26.05.08 15:59) [4]
    Школа. 2 класс. Сложение, вычитание, умножение и деление в столбик. При желании можно выполнять арифметические операции над строковыми представлениями чисел любой длины.
  • Denis__ © (26.05.08 19:37) [5]

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

    Полностью согласен. И делается не так уж и сложно!
  • tesseract © (26.05.08 21:46) [6]

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


    Numeric, таки работает, имееться в виду ?
  • aidyn (27.05.08 07:42) [7]

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

    А как прводить арифметические операции над строков. переменными? подскажите плиз
  • Gadenysh (27.05.08 08:16) [8]
    приводить посимвольно к integer (5 пишем один в уме)
    как сказали, второй класс
  • Рамиль © (27.05.08 10:04) [9]
    Может лучше массивом из байт, а не строками. Зачем тратить время на конвертацию?
  • Style © (27.05.08 11:31) [10]
    а че там конвертировать то
    ord(data[pos])-$30
  • DiamondShark © (27.05.08 11:32) [11]

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

    Какое время? Ничего никуда не конвертируется.
    Символы цифр -- это такие же байты как любые другие.
  • Anatoly Podgoretsky © (27.05.08 11:38) [12]
    Только $31 и $1 не одно и тоже, и тем более если если эти байты Integer, а не BCD
  • Style © (27.05.08 11:46) [13]

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


    естесно, имеется ввиду преобразование одного символа из строки в byte, вернее даже в type TDigit = 0..9
  • Slym © (28.05.08 04:34) [14]
    FGInt
  • KSergey © (28.05.08 08:05) [15]
    > Рамиль ©   (27.05.08 10:04) [9]
    > Может лучше массивом из байт, а не строками. Зачем тратить
    > время на конвертацию?

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

    Хотя, понятно, для этого уже написаны готоыве библиотеки :)
  • inoremap (28.05.08 09:44) [16]
  • Ega23 © (28.05.08 09:55) [17]
    FGInt, и нефиг велосипед изобретать...
  • Romkin © (28.05.08 11:59) [18]
    Вот почему никто не вспоминает о TBCD?
    Ведь есть, 31 знак.
    var
     A, B: Variant;
    begin
     A := VarFMTBcdCreate('12555645345',30,0);
     B := VarFMTBcdCreate('234234423423434352345345',30,0);
     B := B + A;
     ShowMessage(B.AsString);
    end;
 
Конференция "Основная" » 20-значная цифра [D7, WinXP]
Есть новые Нет новых   [134491   +8][b:0][p:0.001]