![]() |
Berechnung mit Double
Hi,
ich hab schon wieder ein Problem :oops: , und zwar:
Delphi-Quellcode:
Ich weiß nicht wie ich mais * 0,8 rechnen soll, ohne dass es einen Error gibt ???
procedure TForm1.Button14Click(Sender: TObject);
begin Geld := Geld + mais * 0.8; mais := 0; Panel12.Caption := floattostr(mais) + ' kg'; Panel7.Caption := inttostr(Geld) + ' €'; end; mais ist vom Typ Double. Ich hoffe ihr könnt mir helfen :? ByStones |
Re: Berechnung mit Double
Dein Fehler ist:
So wie es im Quellcode steht, ist die Variable "Geld" vom Typ Integer. Es muss ebenfalls vom Typ Double sein, um ein Wert vom Typ Double zu addieren. |
Re: Berechnung mit Double
Hey danke das geht, nur ergibt sich bei der Rechnung
150 * 0,8 bei mit nun 150 und das kann doch nicht sein, dass müsste 120 geben ??? habt ihr vielleicht auch dafür eine Lösung ???
Delphi-Quellcode:
der rest des quellcodes für diese funktion ist ja schon oben
if get = 2 then
begin if mais < 40000 then begin mais := mais + Felder * 150; Panel12.Caption := floattostr(mais) + 'kg'; end; end; |
Re: Berechnung mit Double
was für ein Typ ist denn Deine Variable Felder und wo und wie
wird ihr ein Wert übergeben? Grüße Klaus |
Re: Berechnung mit Double
Zitat:
mais: dauble geld: double ich glaub sie werden mit floattostr, inttostr übergeben, wenn du das meinst :cat: |
Re: Berechnung mit Double
dann mal ein dumme Frage wie willst Du denn
0,8 * 150 rechnen, wenn Felder vom Typ Integer ist? Wenn da bei Dir kein Fehler kommt, dann wird Felder irgendwo aufgerundet und das wäre dann 1 und 1 * 150 ist gleich 150. Grüße Klaus |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
Felder sollte einen Typ haben, mit dem man Dezimalbrüche darstellen kann.
Darunter fällt auch der Typ double, real, extended ... Wo bekommt bei Dir Felder denn einen Wert zugewiesen? Wird dazu ein Editfeld benutzt? Grüße Klaus |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
nicht wo Du Felder ausgibst
wo bekommt die Variable Felder den Wert z.B. 0,8 zugewiesen? Irgendwo muß das doch in Deinem Programm passieren. Grüße Klaus |
Re: Berechnung mit Double
wenn ich felder zu double mach, dann gibts ärger mit dem da
Delphi-Quellcode:
case Felder of
2: Feld2.Color := clGreen; 3: Feld3.Color := clGreen; 4: Feld4.Color := clGreen; 5: Feld5.Color := clGreen; 6: Feld6.Color := clGreen; 7: Feld7.Color := clGreen; 8: Feld8.Color := clGreen; 9: Feld9.Color := clGreen; 10: Feld10.Color := clGreen; 11: Feld11.Color := clGreen; 12: Feld12.Color := clGreen; 13: Feld13.Color := clGreen; 14: Feld14.Color := clGreen; 15: Feld15.Color := clGreen; 16: Feld16.Color := clGreen; 17: Feld17.Color := clGreen; 18: Feld18.Color := clGreen; 19: Feld19.Color := clGreen; 20: Feld20.Color := clGreen; 21: Feld21.Color := clGreen; 22: Feld22.Color := clGreen; 23: Feld23.Color := clGreen; 24: Feld24.Color := clGreen; 25: Feld25.Color := clGreen; 26: Feld26.Color := clGreen; 27: Feld27.Color := clGreen; 28: Feld28.Color := clGreen; 29: Feld29.Color := clGreen; 30: Feld30.Color := clGreen; end; |
Re: Berechnung mit Double
Zitat:
ein timer mit interval ... ich schreib lieber den ganzen code rein !!!
Delphi-Quellcode:
hoffe es ist nicht zu groß
unit MainUnit;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) GroupBox1: TGroupBox; GroupBox2: TGroupBox; Edit1: TEdit; GroupBox3: TGroupBox; Edit2: TEdit; GroupBox4: TGroupBox; Button1: TButton; Button2: TButton; Image1: TImage; GroupBox5: TGroupBox; Edit3: TEdit; Button3: TButton; Edit4: TEdit; GroupBox6: TGroupBox; GroupBox7: TGroupBox; Panel1: TPanel; Panel2: TPanel; Button4: TButton; Panel3: TPanel; Panel4: TPanel; Button5: TButton; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; GroupBox8: TGroupBox; Button6: TButton; Panel8: TPanel; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Panel9: TPanel; Panel10: TPanel; Button12: TButton; GroupBox9: TGroupBox; Feld1: TPanel; Feld2: TPanel; Feld3: TPanel; Feld4: TPanel; Feld5: TPanel; Feld6: TPanel; Feld7: TPanel; Feld8: TPanel; Feld9: TPanel; Feld10: TPanel; Feld11: TPanel; Feld12: TPanel; Feld13: TPanel; Feld14: TPanel; Feld15: TPanel; Feld16: TPanel; Feld17: TPanel; Feld18: TPanel; Feld21: TPanel; Feld26: TPanel; Feld22: TPanel; Feld28: TPanel; Feld23: TPanel; Feld24: TPanel; Feld27: TPanel; Feld19: TPanel; Feld30: TPanel; Feld25: TPanel; Feld29: TPanel; Feld20: TPanel; GeldTimer: TTimer; GroupBox11: TGroupBox; Panel13: TPanel; Panel14: TPanel; Button13: TButton; MaxTimer: TTimer; Label1: TLabel; Panel11: TPanel; Label2: TLabel; Panel12: TPanel; Panel15: TPanel; GroupBox10: TGroupBox; Label3: TLabel; Label4: TLabel; ComboBox1: TComboBox; Button15: TButton; Button14: TButton; Panel16: TPanel; Panel17: TPanel; Panel18: TPanel; Panel19: TPanel; Panel20: TPanel; Panel21: TPanel; Panel22: TPanel; Button16: TButton; Button17: TButton; Button18: TButton; procedure Button16Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button15Click(Sender: TObject); procedure MaxTimerTimer(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure GeldTimerTimer(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Save: TIniFile; Felder, getreide, arbeiter, get: double; raps, zuckerrueben, kartoffeln: double; mais, geld: Double; implementation {$R *.dfm} procedure TForm1.Button3Click(Sender: TObject); begin try if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') then begin Save := TIniFile.Create(Edit3.Text+'.ini'); Save.WriteString ('Profileinstellungen','Spielername',Edit1.Text); Save.WriteString ('Profileinstellungen','Bauernhofname',Edit2.Text); Save.WriteString ('Profileinstellungen','Profilname',Edit3.Text); Save.WriteInteger ('Profileinstellungen','Bildnummer',strtoint(Edit4.Text)); showmessage ('Profil konnte erfolgreich angelegt werden!'); end else showmessage ('Sie haben nicht alle Felder ausgefüllt!'); except showmessage ('Profil konnte nicht angelegt werden!'); end; end; procedure TForm1.Button2Click(Sender: TObject); var num: Integer; begin num := strtoint(Edit4.Text); if num <> 1 then begin num := num - 1; Edit4.Text := inttostr (num); end else showmessage('Es muss ein Bild ausgewählt werden!'); end; procedure TForm1.Button1Click(Sender: TObject); var num: Integer; begin num := strtoint(Edit4.Text); if num <> 5 then begin num := num + 1; Edit4.Text := inttostr (num); end else showmessage('Es muss ein Bild ausgewählt werden!'); end; procedure TForm1.FormCreate(Sender: TObject); begin if Felder = 0 then Felder := Felder +1; if arbeiter = 0 then arbeiter := arbeiter + 1; get := 1; if FileExists('C:\WINDOWS\LT-BbLog.ini') then begin Groupbox1.Visible := false; GroupBox2.BringToFront; Form1.Height := 361; Form1.Width := 673; end else begin GroupBox1.BringToFront; GroupBox2.SendToBack; end; end; procedure TForm1.Button4Click(Sender: TObject); begin if Geld > 1499 then begin if Felder <> 30 then begin Felder := Felder +1; Geld := Geld - 1500; Panel7.Caption := floattostr(Geld) + ' €'; Panel2.Caption := floattostr (Felder); if get = 1 then Label2.Caption := floattostr(Felder * 400) + ' kg' else Label2.Caption := floattostr(Felder * 500) + ' kg'; case Felder of 2: Feld2.Color := clGreen; 3: Feld3.Color := clGreen; 4: Feld4.Color := clGreen; 5: Feld5.Color := clGreen; 6: Feld6.Color := clGreen; 7: Feld7.Color := clGreen; 8: Feld8.Color := clGreen; 9: Feld9.Color := clGreen; 10: Feld10.Color := clGreen; 11: Feld11.Color := clGreen; 12: Feld12.Color := clGreen; 13: Feld13.Color := clGreen; 14: Feld14.Color := clGreen; 15: Feld15.Color := clGreen; 16: Feld16.Color := clGreen; 17: Feld17.Color := clGreen; 18: Feld18.Color := clGreen; 19: Feld19.Color := clGreen; 20: Feld20.Color := clGreen; 21: Feld21.Color := clGreen; 22: Feld22.Color := clGreen; 23: Feld23.Color := clGreen; 24: Feld24.Color := clGreen; 25: Feld25.Color := clGreen; 26: Feld26.Color := clGreen; 27: Feld27.Color := clGreen; 28: Feld28.Color := clGreen; 29: Feld29.Color := clGreen; 30: Feld30.Color := clGreen; end; end else showmessage ('Sie besitzen alle Felder in ihrer Umgebung!'); end else showmessage ('Sie besitzen nicht genug Geld!'); end; procedure TForm1.GeldTimerTimer(Sender: TObject); begin if get = 1 then begin if getreide < 40000 then begin getreide := getreide + Felder * 400; Panel14.Caption := floattostr(getreide) + 'kg'; end; end; if get = 2 then begin if mais < 40000 then begin mais := mais + Felder * 150; Panel12.Caption := floattostr(mais) + 'kg'; end; end; if get = 3 then begin if raps < 40000 then begin raps := raps + Felder * 500; Panel18.Caption := floattostr(raps) + 'kg'; end; end; if get = 4 then begin if zuckerrueben < 40000 then begin zuckerrueben := zuckerrueben + Felder * 200; Panel20.Caption := floattostr(zuckerrueben) + 'kg'; end; end; if get = 5 then begin if kartoffeln < 40000 then begin kartoffeln := kartoffeln + kartoffeln * 300; Panel22.Caption := floattostr(kartoffeln) + 'kg'; end; end; if get = 6 then begin if mais < 40000 then begin mais := mais + Felder * 1000; Panel12.Caption := floattostr(mais) + 'kg'; end; end; end; procedure TForm1.Button10Click(Sender: TObject); begin GroupBox11.BringToFront; end; procedure TForm1.Button6Click(Sender: TObject); begin Groupbox7.BringToFront; end; procedure TForm1.Button13Click(Sender: TObject); begin {if Getreide > 9 then begin Getreide := Getreide - 10; Geld := Geld + 5; Panel14.Caption := inttostr(Getreide) + ' kg'; Panel7.Caption := inttostr(Geld) + ' €'; end else showmessage('Sie besitzen nicht genung Getreide!'); } Geld := Geld + Getreide * 5; Getreide := 0; Panel14.Caption := floattostr(Getreide) + ' kg'; Panel7.Caption := floattostr(Geld) + ' €'; end; procedure TForm1.Button11Click(Sender: TObject); begin close; end; procedure TForm1.Button5Click(Sender: TObject); var Sparen: double; begin if arbeiter <> 10 then begin if Geld > 99 then begin Geld := geld - 100; sparen := arbeiter * 100; arbeiter := arbeiter + 1; GeldTimer.Interval := 10000 - sparen; Panel4.Caption := floattostr(arbeiter); Panel7.Caption := floattostr(geld) + ' €'; end else showmessage('Sie besitzen nicht genung Geld!'); end else showmessage('Sie besitzen schon 10 Arbeiter!'); end; procedure TForm1.MaxTimerTimer(Sender: TObject); begin if getreide > 40000 then begin getreide := 40000; Panel14.Caption := floattostr(getreide) + ' kg'; end; if mais > 40000 then begin mais := 40000; Panel12.Caption := floattostr(mais) + ' kg'; end; if get = 1 then Label2.Caption := floattostr(Felder * 400) + ' kg' else Label2.Caption := floattostr(Felder * 150) + ' kg'; end; procedure TForm1.Button15Click(Sender: TObject); begin if Combobox1.Text = 'Getreide' then begin get := 1; Panel16.Caption := ' Gerade: Getreide'; end else if Combobox1.Text = 'Mais' then begin get := 2; Panel16.Caption := ' Gerade: Mais'; end else if Combobox1.Text = 'Raps' then begin get := 3; Panel16.Caption := ' Gerade: Raps'; end else if Combobox1.Text = 'Zuckerrüben' then begin get := 4; Panel16.Caption := ' Gerade: Zuckerrüben'; end else if Combobox1.Text = 'Kartoffeln' then begin get := 5; Panel16.Caption := ' Gerade: Kartoffeln'; end else if Combobox1.Text = 'Trüffel' then begin get := 6; Panel16.Caption := ' Gerade: Trüffel'; end else showmessage('Fehler: Sie müssen ein Sorte auswählen!'); end; procedure TForm1.Button14Click(Sender: TObject); begin Geld := Geld + mais * 0.8; mais := 0; Panel12.Caption := floattostr(mais) + ' kg'; Panel7.Caption := floattostr(Geld) + ' €'; end; procedure TForm1.Button16Click(Sender: TObject); begin Geld := raps * 5; raps := 0; Panel18.Caption := floattostr(raps) + ' kg'; Panel7.Caption := floattostr(Geld) + ' €'; end; end. |
Re: Berechnung mit Double
um dann mal auf eine früheren Beitrag von Dir zurück zu kommen:
mais := mais + Felder * 150; wo Du gesagt hast 0,8 * 150 da kommt 150 raus sollten aber 120 herauskommen. Welche Variable soll denn den Wert 0,8 haben? und wenn Du Felder mit case verwenden willst, dann kann Felder nicht double werden. Dann muß Felder ein Integer sein. Grüße Klaus |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
Es gibt also Probleme bei der case of Abfrage und Felder, da Felder vom Typ Double ist?
Mal so ein Tipp: Deine ganze case of Abfrage kannst Du einfach ersetzen durch:
Delphi-Quellcode:
:wink:
if (Felder > 1) and (Felder < 31) then
FindComponent('Feld' + FloatToStr(Felder)).Color := clGreen; |
Re: Berechnung mit Double
da kommt ein fehler
|
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
Zitat:
[Error] MainUnit.pas(363): E2010 Incompatible types: 'Cardinal' and 'Extended' [Fatal Error] Tycoon.dpr(5): F2063 Could not compile used unit 'MainUnit.pas' |
Re: Berechnung mit Double
Sorry, hab mal wieder nicht aufgepasst:
So muss es heißen:
Delphi-Quellcode:
if (Felder > 1) and (Felder < 31) then
TPanel(FindComponent('Feld' + FloatToStr(Felder))).Color := clGreen; // Edit: Felder muss dann aber auch vom Typ Double sein, das hattest Du doch vorher so geschrieben??? Warum ist das jetzt Cardinal??? //nochmal Edit: Zitat aus Beitrag #11: Zitat:
|
Re: Berechnung mit Double
Zitat:
Felder ist vom Typ Integer und hat bei Dir einen Wert von 2 bis 30 mais := 0,8 + 2 * 150 mais := 2,8 * 150 Irgendwie verstehe ich die Logik in Deinem Programm nicht? Grüße Klaus |
Re: Berechnung mit Double
[Error] MainUnit.pas(363): E2010 Incompatible types: 'Cardinal' and 'Extended'
[Fatal Error] Tycoon.dpr(5): F2063 Could not compile used unit 'MainUnit.pas' bei GeldTimer.Interval := 10000 - sparen; |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
Was hat denn jetzt Felder für einen Typ?
|
Re: Berechnung mit Double
GeldTimer.Interval := 10000 - round(sparen);
Das Timer interval ist vom Typ cardinal Grüße Klaus |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
geht !!!!!!!!!!!!!!!!!!!!
:thumb: :thumb: :thumb: nicht :wall: das mit riund, gibt immer noch 150 [edit=alcaeus]Uebermaessige smilies entfernt. Mfg, alcaeus[/edit] |
Re: Berechnung mit Double
Dann müsste der Code auch funzen.
Zeig doch mal, wo Du Felder deklariert hast und wo der Code steht, den du ersetzt hast (wo vorher die case of Abfrage war). Zitat:
Zitat:
[edit=alcaeus] Uebermaessige smilies aus dem Zitat entfernt. Mfg, alcaeus[/edit] |
Re: Berechnung mit Double
Zitat:
[edit=alcaeus] Uebermaessige Smilies entfernt, Auflage die 16. Mfg, alcaeus[/edit] |
Re: Berechnung mit Double
:firejump: :wall: :wiejetzt: :kotz: Alles ist jetzt kaputt !!!!!!!!!!!!!!
Nein nichts stimmt mehr, die werte rassen über das maximum, alles ist kaputtt :firejump: [edit=alcaeus] Uebermaessige Smilies entfernt. Mfg, alcaeus[/edit] |
Re: Berechnung mit Double
Zitat:
[edit=alcaeus] So, letzte Smilie-attacke entfernt. Mfg, alcaeus[/edit] |
Re: Berechnung mit Double
Dann zeig doch mal etwas Code, so wie er aktuell aussieht.
Sonst kann ich dir auch nicht weiterhelfen. |
Re: Berechnung mit Double
Liste der Anhänge anzeigen (Anzahl: 1)
ihr seid an gar nichts schuld ehrlich, ich bin nur zu dumm !!!!! :wall: :wall: :wall: :wall:
würde es was nützen wenn ich die exe hochladen würde ???? |
Re: Berechnung mit Double
jetzt mal ganz ruhig
aus welchen Variablen mit welchen Werten soll den 120 rauskommen? Vielleicht die pas, dpr und die dfm Datei würde helfen. Grüße Klaus |
Re: Berechnung mit Double
Zitat:
|
Re: Berechnung mit Double
Liste der Anhänge anzeigen (Anzahl: 1)
ich will berechnen wie viel gewinn man durch den mais bekommt.
ein kilo mais = 0,8 € also nehm ich den mais * 0.8 und addiere das ergebniss zu dem vorhandenen geld Quelltext im anhang als rar leider für d2005 |
Re: Berechnung mit Double
diese datei müsst ihr anlegen
C:\WINDOWS\LT-BbLog.ini der inhalt ist egal, die datei muss nur da sein !!! sonst kommt man nur in modus 1 wo man ein profil alegen kann, doch das geht in der beta noch nicht so ein paar probleme sind gelöst |
Re: Berechnung mit Double
Leider habe ich grad ein Problem mit Delphi: :cry:
Zitat:
//Edit: Komischerweise wurde die betreffende Datei "rtl70.bpl" am 09.11.2005 zuletzt geändert und gestern lief Delphi noch ohne Probleme. :roll: |
Re: Berechnung mit Double
geht schon ok
|
Re: Berechnung mit Double
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir kommt da 120 € raus wenn ich 150 kg Mais verkaufe.
Grüße Klaus |
Re: Berechnung mit Double
Zitat:
hä ??????????? EDIT: Jetzt sind auch 120€, :wiejetzt: Ein paar weitere Bugs sind jetzt auch schon gefixed :-) ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 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