Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Runden ohne nachfolgende Nullen (https://www.delphipraxis.net/191987-runden-ohne-nachfolgende-nullen.html)

Uwe Raabe 10. Mär 2017 23:10

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von hanvas (Beitrag 1363769)
Aus welchen Grund sollte ich inc verwenden? Das inc und dec scheller ist als +1/-1 halte ich für einen Mythos.

Der Compiler erzeugt eh für beides denselben Code.

t.roller 11. Mär 2017 07:43

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von juergen (Beitrag 1363772)
Hallo, meine Delphi-Version kann das (leider) noch nicht, du könntest aber die TStringHelper nutzen.
Ich würde das dann so machen:

Delphi-Quellcode:
s := s.TrimRight([#048, #044]);

Man sollte aber den Punkt (#46) am Ende auch entfernen:
Delphi-Quellcode:
s := s.TrimRight([#048, #044, #46]);

Ghostwalker 11. Mär 2017 07:43

AW: Runden ohne nachfolgende Nullen
 
Warum was selber schreiben, wenn es das doch schon gibt.

FloatToStr tut genau das was du möchtest.

BSP.:

Delphi-Quellcode:
const
   cFloats : array[0..6] of double = (
1.234,2.404,2.001,1.000,1.100,1.403,2.330);
{$R *.dfm}

procedure TForm71.TntButton1Click(Sender: TObject);
var
  i : integer;

begin
  log.Lines.Clear;
  for I := 0 to 6 do
  begin
    log.Lines.Append(format('%1.3f',[cFloats[i]])+' = '+floatToStr(cFloats[i]));
  end;
end;
Ergebnis:


Code:
1,234 = 1,234
2,404 = 2,404
2,001 = 2,001
1,000 = 1
1,100 = 1,1
1,403 = 1,403
2,330 = 2,33

t.roller 11. Mär 2017 07:48

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von Ghostwalker (Beitrag 1363786)

Bill Gates, 1981: "640K sollte genug für jedermann sein".

640k: Ja, als Monatseinkommen, egal ob Dollar oder Euro.

Ghostwalker 11. Mär 2017 08:10

AW: Runden ohne nachfolgende Nullen
 
Da stimm ich dir zu. Leider bezog er sich damals auf den Hauptspeicher eines Rechners.

himitsu 11. Mär 2017 09:08

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1363777)
Der Compiler erzeugt eh für beides denselben Code.

Außer bei Properties, wo der Compilier auch nicht schlau genug ist das mit Inc (Pascal) umsetzen zu lassen. :angle:

Aber ja,
Delphi-Quellcode:
Variable := Variable + 1;
wird vom Compiler zu einem INC optimiert.
Letztendlich ist es egal was man nimmt, aber man kann so einen Code kürzer und übersichtlicher gestalten.

Uwe Raabe 11. Mär 2017 10:51

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von himitsu (Beitrag 1363795)
Außer bei Properties, wo der Compilier auch nicht schlau genug ist das mit Inc (Pascal) umsetzen zu lassen. :angle:

Leider funktioniert
Delphi-Quellcode:
Inc(<Property>)
aber auch nicht. :angle:

EWeiss 11. Mär 2017 11:35

AW: Runden ohne nachfolgende Nullen
 
Zitat:

aber man kann so einen Code kürzer und übersichtlicher gestalten.
Und man erkennt wer den sinn einer Programmierung verstanden hat.

Wenn ich nen Audi will nehme ich keinen GOGO.
Von Quelltexten welche solche (sichtbaren) Implementierungen verwenden nehme ich persönlich abstand.
Wäre ein Rückschritt zu VB6 :) Auch wenn ich es noch heute verwende.

Aber ja jeder wie er will.

gruss

kwhk 11. Mär 2017 12:59

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von mkinzler (Beitrag 1363757)
Ich möchte Fließkommazahlen auf z.B. 3-nachkommastellen runden, und als String formatieren.

FloatToString beseitig zwar alle Vornullen und Nachkommanullen, es fehlt aber das Runden auf drei Nachkommastellen.
Delphi-Quellcode:
const
  cFloats : array[0..6] of double = (1.2347,
                                     2.4043,
                                     2.001,
                                     1.0002,
                                     1.100123,
                                     1.4036,
                                     2.330456);
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i : integer;
begin
   log.Lines.Clear;
   for I := 0 to 6 do
   begin
     log.Lines.Append(format('%1.3f',[cFloats[i]])+' = '+floatToStr(cFloats[i]));
   end;
end;
Code:
1,235 = 1,2347
2,404 = 2,4043
2,001 = 2,001
1,000 = 1,0002
1,100 = 1,100123
1,404 = 1,4036
2,330 = 2,330456

Uwe Raabe 11. Mär 2017 13:15

AW: Runden ohne nachfolgende Nullen
 
Zitat:

Zitat von kwhk (Beitrag 1363819)
FloatToString beseitig zwar alle Vornullen und Nachkommanullen, es fehlt aber das Runden auf drei Nachkommastellen.

Dann vielleicht so?
Delphi-Quellcode:
program Project213;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Math;

const
  cFloats: array [0..6] of double = (1.2347, 2.4043, 2.001, 1.0002, 1.100123, 1.4036, 2.330456);

var
  d: double;

begin
  for d in cFloats do begin
    Writeln(format('%1.3f = %s', [d, FloatToStr(RoundTo(d, -3))]));
  end;
  Readln;
end.
Code:
1,235 = 1,235
2,404 = 2,404
2,001 = 2,001
1,000 = 1
1,100 = 1,1
1,404 = 1,404
2,330 = 2,33


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz