![]() |
Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Hallo Zusammen,
in einer Android App wird ein Float als String ausgegeben. Je nach Device werden die Nachkommastellen als Punkt oder Komma konvertiert.
Delphi-Quellcode:
Ich weis es gibt eine Methode die die Culture vom Device überprüft und richtig konvertiert,
ENUSLat := FDFahrzeug.FieldByName('lat_y').AsString;
ENUSLong := FDFahrzeug.FieldByName('lon_x').AsString; ich komme jedoch nicht auf den Namen. Hat jemand eine Idee? Gruß Kostas |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Was meinst du mit "richtig" konvertiert? Das auf allen Geräten, egal welche Sprache, die Zahl immer mit einem Punkt als
Delphi-Quellcode:
ausgegeben wird?
DecimalSeparator
Nimm doch das TField::AsFloat und formatiere es mit ToString(..) und deinen gewünschten TFormatSettings:
Delphi-Quellcode:
uses
System.SysUtils; var myFloat: Single; myFormatSettings: TFormatSettings; begin myFloat := 3.14; myFormatSettings := TFormatSettings.Create('en-us'); Writeln( myFloat.ToString(myFormatSettings) ); end. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Und "früher" war dafür der zweite Parameter in FloatToStr. :stupid:
|
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
PS: Ich kenne mich ja mit Datenbanken eigentlich überhaupt nicht aus. Aber würde das "AsString" nicht die Umwandlung "Zahl -> String" an die Zugriffsschicht (oder etwa das DBMS selbst?) weiterschieben?
Insofern wundert es mich, dass das überhaupt regionsabhängig war. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Zitat:
Besten Dank so funtkionierts. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Ob Datenbank oder nicht, einen Wert speichert man niemals lokalisiert ab, sondern so, dass man den immer wieder korrekt lesen kann. Die Umwandlung mit einer Lokalisierung ist nur für die Anzeige.
Das berücksichtigen aber die Wenigsten und dann kommt es zu unschönen Effekten. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Vielleicht bin ich zu Java-geschädigt, aber ich hätte es besser gefunden wenn man den Anzeige-Fall zum Sonderfall gemacht hätte und nicht "Alles, außer Anzeige" zum Sonderfall in dem man mit FormatSettings jonglieren muss.
Also dass ein einfaches ToString() auf jedem System das gleiche ausgegeben hätte. PS: Ist Boolean.ToString() eigentlich lokalisiert? :spin2: |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Zitat:
Man kann ja die Anzeige als Sonderfall behandeln und gibt da überall das FormatSettings an und stellt im Gegenug das globale FormatSettings bei Programmstart auf Englisch um. (nicht vergessen die Ereignisbehandlung vom Delphi zu deaktivieren, denn das reagiert auf die ÄnderungsMessage des Systems und läd as FormatSettings dann neu) |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Da Delphi typsicher ist (einer der großen Vorteile) gibt es bei der Umwandlung von irgendeinem Typen in einen String ja nur die Anzeige oder in irgendeiner Formatierung.
Nun die Anzeige in der landestypischen Art ist dann eben der Default-Wert und alles andere muss man ja sowieso festlegen, weil man sicher sein muss, dass es in dem Format XY übergeben wird. Der Weg von der Datenabfrage direkt in das Zielformat ist auch nicht das Gelbe vom Ei. Eigentlich holt man sich aus einem Repository (dahinter liegt dann eine Datenbank, oder Datei, oder Web-Service oder die Oma oder ...) einen Wert (Record, Instanz, ...) und reicht den dann an eine Schnittstelle weiter, wo diese Daten dann für die konkrete Implementierung umgesetzt werden und zwar anhand der Schnittstellen-Regeln. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Zitat:
Zitat:
Der Fragesteller wollte nur, das die Zahlen in der Darstellung immer gleich sind. Sie scheinen als Zahl abgelegt worden zu sein. Hätte er den Fehler gemacht, die Zahl als String abzulegen, würde ja 'Field.AsString' immer das gleiche ergeben. Tuts aber nich. |
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Und wenn du den Wert als Timestamp holst und dann formatierst?
|
AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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