Komma Ergebnis falsch

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Peter123
Beiträge: 1
Registriert: Fr 17. Jun 2016, 00:11

Komma Ergebnis falsch

Beitrag von Peter123 »

Guten Tag,

ich habe ein kleines Programm geschrieben, welches nur das Umrechnen und wiedergeben von Grad Celsius in Fahrenheit soll.
Jetzt verstehe ich nicht warum ich jedes mal ein komisches Ergebnis mit einer falschen Kommastelle angezeigt bekomme.

z.B.

Ich gebe 100 als Wert ein und der Rechner gibt mir diesen Wert als Fahrenheit wieder: 2.120000000000E+002

Warum bekomme ich es nicht als ganze Zahl angezeigt?

Programm:

Classes
{ you can add units after this };
var Celcius, Fahrenheit: real;





begin

writeln ('gib den Celcius Wert an');

readln (Celcius); (*lies den Wert für den Celcius ein*)

Fahrenheit:= 32+ Celcius *1.8; (*Berechnung*)
writeln ('Es sind '' Grad Fahrenheit');
writeln (Fahrenheit); (*gebe das Resultat aus*)

readln(); (*Grad in Fahrenheit*)



end.

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Komma Ergebnis falsch

Beitrag von SoE »

Du rechnest mit REAL und wunderst dich wenn dein Programm dir REAL anzeigt ???
Na vielleicht bist du tollkühn und versuchst mal das hier:

FloatToStr
IntToStr
Round

Code: Alles auswählen

 
c:= 32 + 100 * 1.8;
ShowMessage(IntToStr(Round(c)));
 
ShowMessage(FloatToStr(c));
 


btw: wäre SINGLE oder DOUBLE nicht besser als REAL???

EDIT: natürlich gibt es da noch mehrere Möglichkeiten:
z.B.: TRUNC oder INT

Code: Alles auswählen

 
ShowMessage(IntToStr(Trunc(c)));
ShowMessage(FloatToStr(Int(c)));
 
Zuletzt geändert von SoE am Fr 17. Jun 2016, 00:56, insgesamt 1-mal geändert.

BeniBela
Beiträge: 309
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: Komma Ergebnis falsch

Beitrag von BeniBela »

SoE hat geschrieben:

btw: wäre SINGLE oder DOUBLE nicht besser als REAL???



Currency

Die Temperatur wird ja wohl kaum extreme Exponenten haben

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Komma Ergebnis falsch

Beitrag von SoE »

Code: Alles auswählen

 
Currency
 

Stimmt... :) .. das wären dann 4 Stellen nach dem Komma oder? Wobei es wohl auch abhängig davon sein wird wie genau man die Temperatur messen möchte :P :)

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komma Ergebnis falsch

Beitrag von Mathias »

Ich gebe 100 als Wert ein und der Rechner gibt mir diesen Wert als Fahrenheit wieder: 2.120000000000E+002


So kann man das Problem am einfachsten lösen.

Code: Alles auswählen

writeln (Fahrenheit:10:0); (*gebe das Resultat aus*)  

Mit der "0" gibt man an, wie viele Stelle es nach dem Komma sein sollen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Komma Ergebnis falsch

Beitrag von SoE »

writeln (Fahrenheit:10:0);

Hmm.. really nice... das kannte ich noch nicht... danke..

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komma Ergebnis falsch

Beitrag von Mathias »

Das gab es schon zur Turbo Pascals Zeiten. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Komma Ergebnis falsch

Beitrag von SoE »

...Turbo Pascals Zeiten.

OK... das ist 'ne Weile her... die erste Version, die ich davon gesehen habe war 5.5, aber damals hatte ich nicht viel am Hut mit dem Programmschreiben. Ein Familienmitglied hat mit der Version die tollsten Sachen gebaut.
Ich habe mir sogar mal TP 7.0 gekauft und wollte damit anfangen... leider kam was dazwischen. Ich weiß gar nicht mehr wieviel Disketten das waren... waren aber 'ne Menge... :)

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komma Ergebnis falsch

Beitrag von Mathias »

Die : kann man sonst noch gut brauchen.
Nur leider gibt es Probleme mit Umlauten.

Code: Alles auswählen

var
  s: string;
  r: single;
 
begin
  r := 123.456;
  Str(r: 10: 5, s);
  WriteLn(s);
  WriteLn('Ich':10);
  WriteLn('bin':10);
  WriteLn('Rechts':10);
  WriteLn('Bündig':10); // Fehlerhaft
end.



ch habe mir sogar mal TP 7.0 gekauft und wollte damit anfangen... leider kam was dazwischen. Ich weiß gar nicht mehr wieviel Disketten das waren..

Es waren nur 4 Stück. BP 7.0 hatte mehr.
Nur leider wen man eine zu schnelle CPU hatte, ich glaube 233MHz, konnte man die Unit Crt nicht mehr brauchen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

SoE
Beiträge: 84
Registriert: Mo 31. Aug 2015, 01:51

Re: Komma Ergebnis falsch

Beitrag von SoE »

Schätze dann hatte ich wohl BP 7.0 in irgendeiner erweiterten Version. Das waren sicher 10 bis 14 Disketten und zwei dicke Brocken und noch andere Bücher bzw. Hefte. Glücklicherweise kann ich mich nicht an den Preis erinnern, der war auf jeden Fall zu hoch dafür das ich nie damit gearbeitet habe... Das nächste Mal als ich Zeit hatte, hab' ich gesehen, dass es Free Pascal gibt und damit konnte man 32bit Programme bauen....


btw. um IntToStr oder FloatToStr zu nutzen muß man SysUtils in die USES Klausel eintragen, auch wenn das in diesem Fall nicht notwendig ist, da der WriteLn-Weg viel besser ist... hatte ich oben vergessen...

Gibt es eigentlich eine Aufstellung mit allen möglichen Units, die man dort verwenden kann...
Ich benutze nur sehr selten Konsolenprogramme und kenne nur diese hier:

Code: Alles auswählen

Uses
 Video, Mouse, Keyboard, Crt, SysUtils, Classes, Process, Math ....

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komma Ergebnis falsch

Beitrag von Mathias »

Glücklicherweise kann ich mich nicht an den Preis erinnern, der war auf jeden Fall zu hoch dafür das ich nie damit gearbeitet habe...

Da hat sich gegenwärtig zum Glück viel getan, für die Programm-Entwicklung muss man im Normalfall keine Software mehr kaufen.
Es gibt unterdessen für (fast) alles eine Freeware oder OpenSource.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten