Autor Beitrag
dabaduda
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 05.07.16 16:59 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1326
Erhaltene Danke: 120

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 05.07.16 17:05 
Moin,

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

ausblenden 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ß

Für diesen Beitrag haben gedankt: dabaduda
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4439
Erhaltene Danke: 911


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 05.07.16 17:10 
ausblenden 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)


Zuletzt bearbeitet von Ralf Jansen am Di 05.07.16 17:24, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: dabaduda, FinnO
dabaduda Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 05.07.16 17:17 
Was machen Frac(),trunc() und mod genau? Nur damit ich ungefähr verstehe warum das überhaupt funktioniert ^^
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4439
Erhaltene Danke: 911


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 05.07.16 17:21 
Frac gibt dir den Nachkommaanteil einer Zahl, Trunc nur den Vorkommaanteil und mod ist halt der Modulo Operator.

Für diesen Beitrag haben gedankt: dabaduda
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18739
Erhaltene Danke: 1634

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 06.07.16 07: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.