Moin Stefan,
da ist glaub ich ein Fehler drinne:
Zitat von
GPRSNerd:
Delphi-Quellcode:
function TMathe.ZahlNBereinigen(const ZahlN, BasisN: string): string;
//Zahl-String zur Basis N von allen Zeichen bereinigen, die nicht zwischen
// '0' und Chr(N) liegen
var
i: Integer;
ZahlN_: string;
begin
ZahlN_:=Uppercase(ZahlN);
for i := Length(ZahlN_) downto 1 do //Rückwärts da sonst mehrfach hintereinander
//auftretende nicht erlaubte Zeichen nicht korrigiert würden
begin
if ((_GetZahl(ZahlN_[i]) < 0) or (_GetZahl(ZahlN_[i]) >= StrToInt(BasisN))) then
Delete(ZahlN_, i, 1);
end;
Result:=ZahlN_;
end;
Zum einen musst du ein Vorzeichen ignorieren und zum anderen, würde ich _GetZahl puffern und StrToInt auch (da aber außerhalb der schleife).
Also etwas wie sowas:
Delphi-Quellcode:
function TMathe.ZahlNBereinigen(const ZahlN, BasisN: string): string;
//Zahl-String zur Basis N von allen Zeichen bereinigen, die nicht zwischen
// '0' und Chr(N) liegen
var
ZahlN_: string;
i, Ziffer, BasisInt, StartZeichen : Integer;
begin
ZahlN_:=Uppercase(ZahlN);
if Ord(a[1]) in [Ord('+'), Ord('-')] then
StartZeichen := 2
else
StartZeichen := 1;
BasisInt := StrToInt(BasisN);
// Rückwärtige Schleife, da der String hinter der aktuellen Position
// verkürzt wird
for i := Length(ZahlN_) downto StartZeichen do
begin
Ziffer := _GetZahl(ZahlN_[i]);
if (Ziffer < 0) or (Ziffer >= BasisInt) then
Delete(ZahlN_, i, 1);
end;
Result:=ZahlN_;
end;
Zitat von
himitsu:
Also im Prinzip sollte es so funktionieren - bei ImmerNormalisieren sowieso
Ich hab es eigentlich abschaltbar gemacht, falls man mit mehreren gekoppelten Berechnungen sich dieses sparren möchte, aber da sollte man dann vorher die "Eingabewerte" selber einmal manuell Normalisieren.
Naja, ich erwarte aber das Dezimalstellen('+12') mir immer 2 zurückgibt
Abgesehen davon müsste es eigentlich statt "
a[Length(a)]" nur "
a[1]" heißen.
MfG
xZise