Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Aktion von Nachkommastelle abhängig machen


dabaduda - Di 05.07.16 17:59
Titel: Aktion von Nachkommastelle abhängig machen
Wie kann ich Eine Aktion von der Nummer einer Nachkommastelle abhängig machen?
Ich möchte dass immer wenn eine Variable eine 1 hinter dem Komma hat, etwas anderes passiert als wenn nicht.
Bei Zahlen wie 3,1/3,1415/0,1174/81547858,14 soll etwas anderes passieren als bei Zahlen wie 5,5/3,2534/1813541,74334.
Wie kann Delphi herausfinden ob dies der Fall ist oder nicht.


Und warum ist mein ganzer Text weg wenn ich auf absenden klicke, nur weil ich mich nochmal anmelden muss :(


FinnO - Di 05.07.16 18:05

Moin,

du kannst die Zahl mit zehn multiplizieren, die verbleibenden Nachkommastellen abschneiden und gucken ob am Ende eine eins steht:


Delphi-Quelltext
1:
2:
3:
4:
if (trunc(z * 10) - 1mod 10 = 0 then
begin
  // ...
end


PS.: Ich habe Delphi vollständig verdrängt, bei Syntaxfehlern also gerne korrigieren.

Gruß


Ralf Jansen - Di 05.07.16 18:10


Delphi-Quelltext
1:
if (Int(Frac(Zahl) * 10) = 1then                    

Könnte passen. Ist vermutlich die erste Zeile Delphi in diesem Jahrzehnt von mir ;)

Sind deine Quellzahlen auch potentiel negativ?


Funktionsweise

Zahl = 123.1234567
Frac(Zahl) -> 0.1234567 (nur Nachkommaanteil)
Zahl * 10 -> 1.234567 (Komma um eine Stelle verschieben)
Int(Zahl) -> 1 (nach Integer ändern, heißt Nachkommaanteil wegwerfen)


dabaduda - Di 05.07.16 18:17

Was machen Frac(),trunc() und mod genau? Nur damit ich ungefähr verstehe warum das überhaupt funktioniert ^^


Ralf Jansen - Di 05.07.16 18:21

Frac gibt dir den Nachkommaanteil einer Zahl, Trunc nur den Vorkommaanteil und mod ist halt der Modulo Operator.


jaenicke - Mi 06.07.16 08:23

user profile icondabaduda hat folgendes geschrieben Zum zitierten Posting springen:
Und warum ist mein ganzer Text weg wenn ich auf absenden klicke, nur weil ich mich nochmal anmelden muss :(
Bei einem guten Browser kannst du nach der Anmeldung einfach zurück drücken bis du wieder vor der Anmeldung im Antwortfenster bist. Der Text ist dann wieder da und Absenden sollte dann auch klappen.