AGB  ·  Datenschutz  ·  Impressum  







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

FormatFileSize

Ein Thema von MicMic · begonnen am 27. Jul 2018 · letzter Beitrag vom 29. Jul 2018
Antwort Antwort
Seite 2 von 3     12 3      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#11

AW: FormatFileSize

  Alt 27. Jul 2018, 18:24
Es ist nun einmal Fakt, dass Windows eine falsche Speichergröße anzeigt.
Und nur weil sich jeder blind darauf verlässt, dass Windows es schon richtig macht und somit die Speichermengen MB statt MiB usw übernimmt, gibt es diese Verwirrung.

Ich weiß nicht genau welches Problem du hast. Aber du schreist in den Themen selber rum, dass die Leute die aktuell besprochene Thematik einzuhalten haben, schreibst hier aber selber irgendeinen Käse.

Aber wie oben erwähnt. Windows zeigt es seit Jahren falsch an, und jeder übernimmt es blind ohne darüber nachzudenken.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: FormatFileSize

  Alt 27. Jul 2018, 21:42
Je nach dem wo der Code steht, muss man noch "Application.UpdateFormatSettings := false;" setzen, da sonst bei "WM_WININICHANGE" oder "RM_TaskbarCreated" die FormatSettings wieder überschrieben werden (hier im Forum in einem Thread gelesen). Nur mal so als Info.
Das hast du aber nur gelesen, nicht probiert, oder? Das gilt nämlich nur für die globale Instanz FormatSettings, aber nicht für deine selbst erzeugte fs.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: FormatFileSize

  Alt 28. Jul 2018, 08:53
Je nach dem wo der Code steht, muss man noch "Application.UpdateFormatSettings := false;" setzen, da sonst bei "WM_WININICHANGE" oder "RM_TaskbarCreated" die FormatSettings wieder überschrieben werden (hier im Forum in einem Thread gelesen). Nur mal so als Info.
Das hast du aber nur gelesen, nicht probiert, oder? Das gilt nämlich nur für die globale Instanz FormatSettings, aber nicht für deine selbst erzeugte fs.

Ja, nur gelesen Dachte es wäre wichtig, deshalb wollt ich das hier dazuschreiben.
Aber Danke für die Info.
Ich habe jetzt folgendes, da man ja nicht aufrunden soll.
Code:
fs := TFormatSettings.Create;
fs.DecimalSeparator := ',';
_size := 23.203;
result := floattostr(_size);
kp := Pos(',',result);
if kp > 0 then result := copy(result,0,kp+2);
if result[length(result)]='0' then result := copy(result,0,length(result)-1);
result := result + ' '+s;
Ich schneide jetzt einfach ab auf 2 Stellen nach dem Komma und sollte dann zufällig noch eine "0" am Ende sein (beim ersten Copy z.B. aus 232,20343 = 232,20) wird diese "0" dann auch mit dem zweiten Copy entfernt. Beim ersten Copy "kp+2" gibt's keine Probleme wenn der Wert z.B. "232,2" beträgt. Da nimmt er wohl nur +1 weil es mehr nicht gibt. Am Ende füge ich dann noch die Bezeichnung ein "KB, KiB etc."

Edit:
Muss doch den 3 Zeiler nehmem, sprich 2x auf 0 prüfen. Der Wert kann ja z.B. auch "232,0034383" sein
Also doch so:
Code:
if Result[Length(Result)]='0' then result := Copy(Result,0,Length(Result)-1);
if Result[Length(Result)]='0' then result := Copy(Result,0,Length(Result)-1);
if Result[Length(Result)]=',' then result := Copy(Result,0,Length(Result)-1);
Michael

Geändert von MicMic (28. Jul 2018 um 08:57 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#14

AW: FormatFileSize

  Alt 28. Jul 2018, 09:13
Da dieses Thema ja stark von der Oberlehrerfraktion besetzt ist:

Wenn man einen Wert rundet, dann werden nach Selbigem niemals die Nachkommastellen entfernt.
Code:
232,0034383 auf 2 Nachkommastellen gerundet: 232,00
Du kannst dir also diesen Zirkus sparen.
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: FormatFileSize

  Alt 28. Jul 2018, 09:13
Da der Wert auch 0 sein kann... Update:
Ohne "if Result <> '0' Then" würde es nämlich dann bei den Wert "0" ein Fehler verursachen.
Code:
fs := TFormatSettings.Create;
fs.DecimalSeparator := ',';
result := floattostr(_size);
kp := Pos(',',result);
if kp > 0 then result := copy(result,0,kp+2);
if Result <> '0' Then
Begin
  if Result[Length(Result)]='0' then result := Copy(Result,0,Length(Result)-1);
  if Result[Length(Result)]='0' then result := Copy(Result,0,Length(Result)-1);
  if Result[Length(Result)]=',' then result := Copy(Result,0,Length(Result)-1);
End;
result := result + ' '+s;
Michael
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: FormatFileSize

  Alt 28. Jul 2018, 09:19
Da dieses Thema ja stark von der Oberlehrerfraktion besetzt ist:

Wenn man einen Wert rundet, dann werden nach Selbigem niemals die Nachkommastellen entfernt.
Code:
232,0034383 auf 2 Nachkommastellen gerundet: 232,00
Du kannst dir also diesen Zirkus sparen.
Das Thema (bei mir *g) ist ja, da ich nicht weis wie ich mit Format/FormatFloat abrunden kann. Da wird ja aufgerundet und wie ich das jetzt verstanden habe, soll man bei einer Anzeige von Dateigrößen nicht aufrunden. Windows rundet ab, bei dem einem Beispielwert (weiter oben) 1,09. Format/FormatFloat macht 1,1 und der bekannte TotalCommander macht ne "1" (mit der Bezeichnung "M") raus. Ich mach den Zirkus ja nicht Wir alle

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: FormatFileSize

  Alt 28. Jul 2018, 10:54
da ich nicht weis wie ich abrunden kann
Na da kann Dir geholfen werden, mitSetRoundMode() ist so ein Verhalten steuerbar.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: FormatFileSize

  Alt 28. Jul 2018, 11:13
Na da kann Dir geholfen werden, mitSetRoundMode() ist so ein Verhalten steuerbar.
Kannst du mal den Code zeigen, mit dem das funktioniert?

Ich würde das explizit ausprogrammieren:

Delphi-Quellcode:
  
  if <mit Punkt> then begin
    // sprachinvariant, immer mit Punkt
    fs := TFormatSettings.Invariant;
  end
  else begin
    // mit Komma oder was im Windows halt gerade eingestellt ist
    fs := FormatSettings;
  end;
  result := Format('%s %s', [FormatFloat('0.##', Floor(100*_size)/100, fs), s]);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: FormatFileSize

  Alt 28. Jul 2018, 11:22
Kannst du mal den Code zeigen, mit dem das funktioniert?
Ausführlicher Beispiel Code ist doch im Link? Vielleicht habe ich das was gefordert ist auch falsch Verstanden, wobei es bei auf/ab-runden nicht viel falsch zu verstehen gibt. Du meinst bestimmt seinen Code, ich meinte generell auf/abrunden.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#20

AW: FormatFileSize

  Alt 28. Jul 2018, 11:36
Na da kann Dir geholfen werden, mitSetRoundMode() ist so ein Verhalten steuerbar.
Kannst du mal den Code zeigen, mit dem das funktioniert?

Ich würde das explizit ausprogrammieren:

Delphi-Quellcode:
  
  if <mit Punkt> then begin
    // sprachinvariant, immer mit Punkt
    fs := TFormatSettings.Invariant;
  end
  else begin
    // mit Komma oder was im Windows halt gerade eingestellt ist
    fs := FormatSettings;
  end;
  result := Format('%s %s', [FormatFloat('0.##', Floor(100*_size)/100, fs), s]);
Jo, ist natürlich besser als mein Pos/Copy Zeugs Ich kenne natürlich Floor, wusste aber nicht wie ich es dort in der Zeile einsetze. Das nehme ich jetzt. Danke
Aber wegen diesen FormatSettings…

Wenn ich immer:
Code:
fs := TFormatSettings.Create;
fs.DecimalSeparator := ','; // oder '.' oder '/' (wie ich halt will)
nehme, bin ich auf der sicheren Seite mit meinem Komma oder Punkt. Oder?

Michael
  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 10:32 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