![]() |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Vorschlag für StrToInt:
Delphi-Quellcode:
Auf jeden Fall sollten auch negative Zahlen unterstützt werden, sonst ist der Typ zu sehr eingeschränkt.
uses
SysConst; function StrToInt(const S: String): TBigUInt; var n: String; i: Integer; c: char; begin {Leerzeichen am Anfang und Ende entfernen} n := Trim(s); if Length(n) = 0 then raise EConvertError.CreateResFmt(@SInvalidInteger, [S]); Result := 0; for i := 1 to Length(n) do begin c := n[i]; if (c < '0') or (c > '9') then raise EConvertError.CreateResFmt(@SInvalidInteger, [S]); Result := Result * 10 + (Ord(c) - Ord('0')); end; end; Edit: n[1] durch n[i] ersetzt :wink: gut das einer aufpasst |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Delphi-Quellcode:
c := n[i];
|
Re: TBigUInt - Noch ein Datentyp für große Zahlen
würde es ein bissl beschleunigen, wenn nicht für jede Stelle mit der großen Zahl gerechnet würde :angel:
(praktisch die Umkehrung des IntToStr)
Delphi-Quellcode:
[edit] i2 durch i3 ersetzt (siehe gammatester)
Result := 0;
i2 := 0; i3 := 1; for i := 1 to Length(n) do begin if not (n[i] in ['0'..'9']) then raise EConvertError.CreateResFmt(@SInvalidInteger, [S]); i2 := i2 * 10 + (Ord(n[i]) - Ord('0')); i3 := i3 * 10; if (i3 = 1000000000) or (i = Length(n)) then begin Result := Result * i3 + i2; i2 := 0; i3 := 1; end; end; |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Delphi-Quellcode:
if (i3 = 1000000000) or (i = Length(n)) then {...}
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz