AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ganze Zahl immer auf nächste 50 runden?

Ein Thema von BBoy · begonnen am 26. Feb 2017 · letzter Beitrag vom 27. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2   
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 19:57
Delphi-Version: 10 Seattle
Wie kann ich eine ganze Zahl auf die nächsten 50 auf oder abrunden?
zb:
1732 = 1700
1776 = 1800

Also so lange die 10er <50 wird abgerundet und wenn 10er >=50 dann aufrunden.

Ich sag schon mal Danke für eure Hilfe
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 20:05
ungetestet und ggf. zu kompliziert ��

Delphi-Quellcode:
if (x +49 mod 50) mod 2 = 0 then
   erg := (x +49 mod 50)*50
else
   erg := (x +49 mod 50)*50-50.
Philip

Geändert von Darlo (26. Feb 2017 um 20:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 20:10
Ich verstehe das Beispiel nicht. Willst Du wirklich auf 50 runden oder doch eher auf 100?

[edit] Falls Letzteres, aus dem Hut und ungetestet:
Delphi-Quellcode:
if Zahl mod 100 < 50 then
  Zahl := Zahl div 100 * 100
else
  Zahl := Succ(Zahl div 100) * 100;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (26. Feb 2017 um 20:25 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#4

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 20:30
SetRoundMode(rmNearest);
http://docwiki.embarcadero.com/CodeE...ndMode_(Delphi)
Zwischenschritte: Div 100, Multi 100

Delphi-Quellcode:
uses ...System.Math,...

procedure TForm1.ButtonClick(Sender: TObject);
var
  OldRM: TRoundingMode;
  TestValue: Real;

  procedure RecordRound(const TextStr: String; Value: Real);
  { Calls Round() and shows its value in the Memo control.
    Affected by the value passed to SetRoundMode(). }

  var RetVal: Real;
  begin
    RetVal := Round(Value);
    Memo1.Lines.Add(Format('%-15s RetVal=%f', [TextStr, RetVal]));
  end;

begin
  OldRM := GetRoundMode; { Save the original setting for the Round Mode }

  TestValue := 5.7; { First test value }
  Memo1.Lines.Add(Format('Value=%f', [TestValue]));

  SetRoundMode(rmDown);
  RecordRound('rmDown #1', TestValue);

  SetRoundMode(rmUp);
  RecordRound('rmUp #2', TestValue);

  SetRoundMode(rmNearest);
  RecordRound('rmNearest #3', TestValue);

  SetRoundMode(rmTruncate);
  RecordRound('rmTruncate #4', TestValue);

  Memo1.Lines.Add(''); { Adds a blank line to the memo }

  TestValue := -1.3; { Second test value }
  Memo1.Lines.Add(Format('Value=%f', [TestValue]));

  SetRoundMode(rmDown);
  RecordRound('rmDown #5', TestValue);

  SetRoundMode(rmUp);
  RecordRound('rmUp #6', TestValue);

  SetRoundMode(rmNearest);
  RecordRound('rmNearest #7', TestValue);

  SetRoundMode(rmTruncate);
  RecordRound('rmTruncate #8', TestValue);

  SetRoundMode(OldRM); { Restore the original Rounding Mode }
end;
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.163 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 20:41
Hallo,

in der Umsetzung aufwändig, aber das Ergebnis scheint zu stimmen :
Delphi-Quellcode:
function auf50kaufmaennisch_runden(Const Value: Integer): Integer;
Var
  i, temp: Integer;
begin
  temp := Value;
  if temp > 49 then begin
    if (StrToInt(copy(IntToStr(temp), Length(IntToStr(temp)) - 1, Length(IntToStr(temp)))) > 49) then begin
      for i := 0 to 50 do begin
        if temp mod 50 = 0 then begin
          Result := temp;
          Exit;
        end
        else Inc(temp);
      end;
    end else begin
      for i := 50 downto 0 do begin
        if temp mod 50 = 0 then begin
          Result := temp;
          Exit;
        end
        else Dec(temp);
      end;
    end;
  end
  else Result := 0;
end;

procedure TForm11.Button1Click(Sender: TObject);
begin
  showmessage(IntToStr(auf50kaufmaennisch_runden(SpinEdit1.Value)));
end;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 21:24
Deine Beschreibung sagt Rundung auf hundert, das wäre dann so:

Delphi-Quellcode:
function RundenAufHundert(const Wert: Integer): Integer;
begin
  Result := Round(Wert / 100) * 100;
end;
Immer auf die vollen Fünfziger zu runden würde ich so machen:

Delphi-Quellcode:
function RundenAufFünfzig(const Wert: Integer): Integer;
begin
  Result := Round(Wert / 50) * 50;
end;
Oder allgemein:

Delphi-Quellcode:
function RundenAufZahl(const Wert, Zahl: Integer): Integer;
begin
  Result := Round(Wert / Zahl) * Zahl;
end;

Geändert von Benedikt Magnus (26. Feb 2017 um 21:28 Uhr)
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 22:09
Deine Beschreibung sagt Rundung auf hundert, das wäre dann so:

Delphi-Quellcode:
function RundenAufHundert(const Wert: Integer): Integer;
begin
  Result := Round(Wert / 100) * 100;
end;
Immer auf die vollen Fünfziger zu runden würde ich so machen:

Delphi-Quellcode:
function RundenAufFünfzig(const Wert: Integer): Integer;
begin
  Result := Round(Wert / 50) * 50;
end;
Oder allgemein:

Delphi-Quellcode:
function RundenAufZahl(const Wert, Zahl: Integer): Integer;
begin
  Result := Round(Wert / Zahl) * Zahl;
end;
So isses.
Philip
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 22:21
In System.Math gibt es auch eine Funktion RoundTo , mit der das ebenfalls recht einfach realisiert werden kann. Runden auf ganze 100er ginge dann so:

Delphi-Quellcode:
function RundenAufHundert(const Wert: Integer): Integer;
begin
  Result := RoundTo(Wert, 2);
end;
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
 
#9

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 26. Feb 2017, 23:55
Nö: E2010 Inkompatible Typen: 'Integer' und 'Extended'

Delphi-Quellcode:
function RundenAufHundert(const Wert: Extended): Extended;
begin
  Result := RoundTo(Wert, 2);
end;

Geändert von t.roller (26. Feb 2017 um 23:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Ganze Zahl immer auf nächste 50 runden?

  Alt 27. Feb 2017, 08:35
Nö: E2010 Inkompatible Typen: 'Integer' und 'Extended'
OK, dann eben so:

Delphi-Quellcode:
function RundenAufHundert(const Wert: Integer): Integer;
begin
  Result := Round(RoundTo(Wert, 2));
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:54 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