AGB  ·  Datenschutz  ·  Impressum  







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

Runden ohne nachfolgende Nullen

Ein Thema von Rollo62 · begonnen am 10. Mär 2017 · letzter Beitrag vom 13. Mär 2017
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#11

AW: Runden ohne nachfolgende Nullen

  Alt 10. Mär 2017, 23:10
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#12

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 07:43
Hallo, meine Delphi-Version kann das (leider) noch nicht, du könntest aber die TStringHelper nutzen.
Ich würde das dann so machen:

s := s.TrimRight([#048, #044]);
Man sollte aber den Punkt (#46) am Ende auch entfernen:
s := s.TrimRight([#048, #044, #46]);
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 07:43
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
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#14

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 07:48

Bill Gates, 1981: "640K sollte genug für jedermann sein".
640k: Ja, als Monatseinkommen, egal ob Dollar oder Euro.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 08:10
Da stimm ich dir zu. Leider bezog er sich damals auf den Hauptspeicher eines Rechners.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 09:08
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.

Aber ja, 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Mär 2017 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#17

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 10:51
Außer bei Properties, wo der Compilier auch nicht schlau genug ist das mit Inc (Pascal) umsetzen zu lassen.
Leider funktioniert Inc(<Property>) aber auch nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 11:35
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
  Mit Zitat antworten Zitat
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 12:59
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
Hartmut
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#20

AW: Runden ohne nachfolgende Nullen

  Alt 11. Mär 2017, 13:15
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:25 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