![]() |
AW: FormatFileSize
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. |
AW: FormatFileSize
Zitat:
|
AW: FormatFileSize
Zitat:
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:
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."
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; 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:
Michael
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); |
AW: FormatFileSize
Da dieses Thema ja stark von der Oberlehrerfraktion besetzt ist:
Wenn man einen Wert rundet, dann werden nach Selbigem niemals die Nachkommastellen entfernt.
Code:
Du kannst dir also diesen Zirkus sparen.
232,0034383 auf 2 Nachkommastellen gerundet: 232,00
|
AW: FormatFileSize
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:
Michael
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; |
AW: FormatFileSize
Zitat:
Michael |
AW: FormatFileSize
Zitat:
![]() |
AW: FormatFileSize
Zitat:
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]); |
AW: FormatFileSize
Zitat:
|
AW: FormatFileSize
Zitat:
Aber wegen diesen FormatSettings… Wenn ich immer:
Code:
nehme, bin ich auf der sicheren Seite mit meinem Komma oder Punkt. Oder?
fs := TFormatSettings.Create;
fs.DecimalSeparator := ','; // oder '.' oder '/' (wie ich halt will) Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr. |
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-2025 by Thomas Breitkreuz