Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Killogramm, Gramm und milligram

  Alt 4. Jul 2006, 20:50
Ich bin ja mal nett

Zitat von TheCatcher:
a) Wie sage ich delphi das er NICHT auch die nachkomma stellen zählen soll? StrLn geht nicht
Wenn der Wert größergleich 1000 ist.
Wenn du das als String einliest musst du das dann einfach in eine Fließkommazahl (Extended) umwandeln.


Zitat von TheCatcher:
b) habe ich bei einigen Werten ein NULL zu wenig bei dem nachkomme also 6565,5 <- statt 6565,50
Soll es immer 3 Nachkommastellen geben?
Also z.B. 1,000 g?

Dann könntest du das in einer Schleife (ich finde eine for-schleife schön ):
SValue = Wert als String ('123,45')
Value = Wert (123,45)
Nachkomma = Nachkommastellen (0,45)
Laenge = Länge der Nachkommstellen (2)
Delphi-Quellcode:
Value := StrToFloat(SValue);
//Nachkommastellen "errechnen"
Nachkomma := Value - Round(Value);

// Länge bestimmen
{ Entweder du wandelst es in einen String um und überprüfst die Länge }
Laenge := FloatToStr(Nachkomma) - 2; // - 2 wegen dem komma und der führenden null: [0,]45
{ Du könntest es auch ausrechnen (is komplizierter), werde es aber nicht hier erklären, da es über den String auch funktionieren sollte }

// Nullen "ansetzen"
for i := Laenge to 3 do
  SValue := SValue + '0';

// Aus diesem Code kann man dann auch einen einzeiler machen (ACHTUNG: Komplizierter ;) )
for i := FloatToStr(StrToFloat(SValue) - Round(StrToFloat(SValue))) - 2 to 3 do
  SValue := SValue + '0';
Zusammenfassend zu der Aufgabe: Du musst einfach nur ein bisschen rechnen lassen, allerdings nicht mit Strings. Die Strings solltest du nur verwenden, wenn du es ausgeben willst, oder (wie es bei Fall B der fall war ^^) wenn du etwas hinzufügen willst (Nullen vor/nach allen Ziffer (001,200)), was beim Integer/Extended eiskalt (^^) gelöscht werden würde.

Ich hoffe mal ich konnte weiterhelfen.

Eine Frage: Sollte es nur von Tonnen - Milligramm gehen? Oder auch darüber?

Ich möchte ungerne das fertige Programm jetzt posten, aber ich geben einen Anstoß:
(weitere Erklärung siehe oben)
Delphi-Quellcode:
// Zuerst den Wert IMMER in ein Extended umwandeln ;) Damit lässt sich alles besser berechnen
Value := StrToFloat(SValue);
if Value >= 1000 then begin // in Kilogramm
  if Value / 1000 >= 1000 then begin // in Tonnen/Megagramm
    // Umrechnung in Tonnen (aufpassen: Umwandlung Gramm >>> Tonnen ist 1 Gramm * 1.000.000 = 1 Tonne!)
  end else begin
    // Umrechnung in Kilogramm
  end;
end else if Value < 1 begin // in Milligramm
  // Umrechnung in Milligramm
end else begin // so lassen (GRamm)
  //keine Umrechnung
end;
xZise hat folgendes hinzugefügt:
Übrigends musst du es nachher wieder umwandeln und in ein Label/Edit eintragen.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat