![]() |
Zahlen zerlegen
Kann man unsigned Integer im Bereich von 0-999 effektiver (also mit weniger Code, Performance nicht sehr relevant) in Einer, Zehner und Hunderter zerlegen?
----------- PS: optimierte Version -----------
Delphi-Quellcode:
interface type TZahlSplitter = class(TObject) public class function getEiner(aZahl: UInt): UInt; class function getZehner(aZahl: UInt): UInt; class function getHunderter(aZahl: UInt): UInt; end; implementation { TZahlSplitter } class function TZahlSplitter.getEiner(aZahl: UInt): UInt; begin Result := aZahl mod 10; end; class function TZahlSplitter.getZehner(aZahl: UInt): UInt; begin Result := (Zahl div 10) mod 10; end; class function TZahlSplitter.getHunderter(aZahl: UInt): UInt; begin Result := (Zahl div 100) mod 10; end; |
AW: Zahlen zerlegen
Ja. Abgesehen davon, dass ein Uint8 nicht bis 999 reicht:
Delphi-Quellcode:
Einer := Zahl mod 10;
Zehner := (Zahl div 10) mod 10; Hunderter := (Zahl div 100) mod 10; |
AW: Zahlen zerlegen
Ich würde das über die Länge machen:
Mit Trunk die ganzzahlermittel in String wandeln dann haste je stelle Milliarden,Millionen bis einer |
AW: Zahlen zerlegen
Zitat:
Habe den Code oben umgebaut. Kürzer geht's vermutlich wirklich nicht und die String Konvertierungen sind auch überflüssig. |
AW: Zahlen zerlegen
Notfalls schaltest du einfach mal die Bereichs-/Indexprüfungen in deinen Projektoptionen an, damit du sowas wie mit der 999 selber mitbekommst.
|
AW: Zahlen zerlegen
Delphi-Quellcode:
Nicht getestet, ingame geschrieben!
function getNthDigit(Number: UInt; N: Byte): Integer;
begin if N > 10 then // "4294967296" ist 2^31 (größte Zahl) und hat 10 Stellen Result := -1 // Fehler else begin while N > 1 do begin Number := Number div 10; dec(N); end; Result := Number mod 10; end; end; |
AW: Zahlen zerlegen
Dann aber so:
Delphi-Quellcode:
:)
type
TDigitPosition = 1..10; // Da sollte die Bereichsprüfung zuschlagen TDecimalDigit = 0..9; // Einfach ums abzurunden :D function getNthDigit(Number: UInt; N: TDigitPosition): TDecimalDigit; begin Result := (Number div Integer(Power(10, N-1))) mod 10; // Cast ggf. nicht nötig, weiss gerade nicht ob's ne Int-Überladung gibt end; |
AW: Zahlen zerlegen
Quält euch nicht länger.
3stellig reicht in diesem kleinen Experiment völlig aus und ich habe gelernt, das der Modulus zu mehr zu gebrauchen ist, als zum Realisieren von Seitennummerierungen :) Danke. |
AW: Zahlen zerlegen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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