Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#23

Re: wirklich große Zahlen unter Delphi

  Alt 16. Aug 2006, 19:34
Ja, da man so sehr einfach in 5er Schritten die Anzahl der Stellen der Zahl abzählen kann.

Du kannst dasaber abändern wie du es wünscht

NStr() kann die Binärzahl, interne Darstelung, in insgesamt 63 verschiedene Zahlenbasen umwandeln. Alle Basen von 2 bis 64 und 256 sind möglich. Du kannst die IInteger also mit NStr() zb. zur basis 10 = Dezimal umwandeln, oder Oktal = Basis 8 oder Trinär Basis 3 usw. usw.

Beispiel:

Delphi-Quellcode:
var
  S: TStrFormat;
begin
  NStr(N); // umwandeln nach Default Format gespeichert in der globalen Struktur NStrFormat in Unit NInts.pas

  NStr(N, 2) // umwandeln zu einem Binärzahlenstring
  NStr(N, 16) // umwandeln in einen Hexadezimalen String

  S := NStrFormat;
  S.Base := 10;
  S.Plus := '+';
  S.Minus := '-';
  S.Zero := '0';
  S.DigitsPerBlock := 10; // 10 Ziffern als Block
  S.BlockSep := '-#-'; // die Zeichen -#- zwischen den 10'er Blöcken

  NStr(N, S); // umwandeln in unser eigenes Stringformat
end;

Type
  TStrFormat = packed record // String-Convertion structure
    Base: TBase; // Numberbase
    Plus: array[0..15] of Char; // String for positive IInteger (+)
    Minus: array[0..15] of Char; // String for negative IInteger (-)
    Zero: array[0..15] of Char; // String for zero (0)
    Comma: Char;
    DigitsPerBlock: Word; // Digits on one Block
    BlockSep: array[0..15] of Char; // separator between two blocks (Space)
    BlockPadding: Char; // left padding char of first block
    DigitsPerLine: Word; // count of digits in one line
    LineSep: array[0..15] of Char; // separator after one line (CR+LF)
    LinePadding: Char; // left padding char of first line
    DigitsChars: array[0..63] of Char; // possible Digits of a valid Numberstring
    FormatChars: array[0..63] of Char; // Numberstrings can contain these chars, but should be ignored
    LeftAlign: Boolean;
    Offset: Integer; // Offset to first char that contains digits, NSet(string)
    Precision: Integer;
  end;

var
  NStrFormat: TStrFormat = (
    Base: 10;
    Plus: '';
    Minus: '-';
    Zero: '';
    Comma: ',';
    DigitsPerBlock: 5;
    BlockSep: ' ';
    BlockPadding: ' ';
    DigitsPerLine: 0;
    LineSep: #13#10;
    LinePadding: #0;
    DigitsChars: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
    FormatChars: ' /\-+;:#~"()[]?_<>!§$%&{}'''#13#10#9;
    LeftAlign: False;
    Offset: 0;
    Precision: 0;
   );

function NStr(const A: IInteger; Base: TBase = 0): String; overload;
function NStr(const A: IInteger; const Format: TStrFormat): String; overload;
Oben mal die Typdeklaration von TStrFormat und die globale Variable NStrFormat die als Default benutzt wird.

Gruß Hagen
  Mit Zitat antworten Zitat