AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Max. 3 Nachkommastellen

Ein Thema von Carsten1234 · begonnen am 15. Jun 2009 · letzter Beitrag vom 16. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#1

Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 08:50
Hallo zusammen,

bzgl. Runden mit 3, 4, 5 Nachkommastellen mit Hilfe von Format oder FormatFloatToStrF gibt es ja einiges zu lesen, doch zu meinem Problemchen im Betreff habe ich noch keine gute Lösung gefunden.
Ich möchte nämlich, dass ein Float max. 3 Nachkommastellen hat, optional aber auch weniger, wenn der Anwender weniger Nachkommastellen eingibt.
Bsp.:
1500 => 1500
100,01 => 100,01
0,3972 => 0,397
0,8767 => 0,877

Wie kann ich das denn möglichst einfach erreichen?

Dank vorab und Gruß, Carsten
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 08:54
So einfach geht das nicht
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:07
Also mir fällt da spontan folgendes Vorgehen ein:

1. Bediener gibt Nachkommastellen ein (z.B. n = 3)
2. du berechnest dann: 10^n (in diesem Fall 1000)
3. du multiplizierst es mit deiner eingegebenen Zahl für dein 3.Beispiel sähe das wie folgt aus: 0,3972 * 1000 = 397,2
4. du rundest(round) es => 397
5. du dividierst es wieder durch 1000 und gibst es mit format aus => 0,397

ist zwar erstmal etwas umständlich sollte aber machen, was du möchtest in relativ wenigen Schritten. Gibt aber sicherlich noch andere mögliche Wege.

MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#4

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:09
Formatier doch einfach die Zahl mit drei Nachkommastellen und entferne bei Bedarf die Nullen am Ende

Dust Signs
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:24
Hallo,

vielleicht geht es so:

Delphi-Quellcode:
var
  s : string;
  x : Double;
begin
  s := Format('%g', [{Math.}RoundTo(x, -3)]);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:25
Zitat von Dust Signs:
Formatier doch einfach die Zahl mit drei Nachkommastellen und entferne bei Bedarf die Nullen am Ende

Dust Signs
und nicht das Komma vergessen zu entfernen, falls danach alle Nullen weg sind

Delphi-Quellcode:
Function MyFormat(f: Extended; Precession: Integer): String;
  Begin
    Result := Format('%.*n', [Precession, f])
    While Result[Length(Result)] = '0do Delete(Result, Length(Result), 1);
    If Result[Length(Result)] = DecimalSeparator Then Delete(Result, Length(Result), 1);
  End;
[edit]

Delphi-Quellcode:
Function MyFormat(f: Extended; Precession: Byte; Width: Byte = 0): String;
  Begin
    Result := Format('%*.*n', [Width, Precession, f]);
    If Precession > 0 Then Begin
      While Result[Length(Result)] = '0do Delete(Result, Length(Result), 1);
      If Result[Length(Result)] = DecimalSeparator Then Delete(Result, Length(Result), 1);
    End;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:35
@himitsu

.. wenn dann eine Ganzzahl übergeben wird und Presession > 0 ist,
dann wird aus einer 100 eine 1

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:40
OK, hatte ich zwar noch nicht das Problem, aber dann einfach so ^^
Delphi-Quellcode:
Function MyFormat(f: Extended; Precession: Byte; Width: Byte = 0): String;
  Begin
    Result := Format('%*.*n', [Width, Precession, f]);
    If Pos(DecimalSeparator, Result) > 0 Then Begin
      While Result[Length(Result)] = '0do Delete(Result, Length(Result), 1);
      If Result[Length(Result)] = DecimalSeparator Then Delete(Result, Length(Result), 1);
    End;
  End;
oder
Delphi-Quellcode:
Function MyFormat(f: Extended; Precession: Byte; Width: Byte = 0): String;
  Var i: Integer;

  Begin
    Result := Format('%*.*n', [Width, Precession, f]);
    If Pos(DecimalSeparator, Result) > 0 Then Begin
      i := Length(Result);
      While Result[i] = '0do Dec Dec(i);
      If Result[i] = DecimalSeparator Then Dec(i);
      Result := Copy(Result, 1, i);
    End;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 09:47
Hab mir auch mal eine Lösung überlegt, könnt ja mal raufschauen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

procedure Ausgabevorbereitung(var n: integer;dfWert: double);
function Potenz(n: integer): integer;

var
  Form1: TForm1;
  dWert: double;
  iKommastellen: integer;

implementation

{$R *.dfm}

function Potenz(n: integer): integer;
begin
  if n = 1 then result := 10
  else
    begin
      n := n-1;
      result := 10 * Potenz(n);
    end;
end;

procedure Ausgabevorbereitung(var n: integer; dfWert: double);
var dTemp: double;
begin
  dTemp := round(dfWert);
  if (dTemp = (dfWert * 10)) or (n = iKommastellen) then
    begin
      Form1.Label1.Caption := floattostr(dTemp/Potenz(n));
    end
  else
    begin
      n := n+1;
      Ausgabevorbereitung(n,dfWert * 10);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var Index: integer;
begin
  dWert := 1.2345678;
  iKommastellen := 3;
  Index := 0;
  Ausgabevorbereitung(Index,dWert);

end;

end.
MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#10

Re: Max. 3 Nachkommastellen

  Alt 15. Jun 2009, 10:06
Zitat von Dust Signs:
Formatier doch einfach die Zahl mit drei Nachkommastellen und entferne bei Bedarf die Nullen am Ende
Stimmt!
Erstmal mit
Result:= Format('%0.3f', [AValue]); auf 3 Nachkommastellen aufbohren, dann
Delphi-Quellcode:
while (Length(Result) > 1) and
      (Copy(Result, Length(Result), 1) = '0') do
    Delete(Result, Length(Result), 1);
alle hinteren Nullen entfernen und ggf. noch
Delphi-Quellcode:
if (Copy(Result, Length(Result), 1) = DecimalSeparator) then
    Delete(Result, Length(Result), 1);
den DecimalSeparator entfernen.
So bleibt dann bei 0,000 auch nur die 0 vor dem Komma stehen.

Danke!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz