AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)
Thema durchsuchen
Ansicht
Themen-Optionen

Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

Ein Thema von Kostas · begonnen am 2. Okt 2014 · letzter Beitrag vom 2. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 12:23
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:
    ENUSLat := FDFahrzeug.FieldByName('lat_y').AsString;
    ENUSLong := FDFahrzeug.FieldByName('lon_x').AsString;
Ich weis es gibt eine Methode die die Culture vom Device überprüft und richtig konvertiert,
ich komme jedoch nicht auf den Namen.

Hat jemand eine Idee?

Gruß Kostas
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 12:30
Was meinst du mit "richtig" konvertiert? Das auf allen Geräten, egal welche Sprache, die Zahl immer mit einem Punkt als DecimalSeparator ausgegeben wird?

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 12:40
Und "früher" war dafür der zweite Parameter in FloatToStr.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 13:49
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.
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.095 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:19
Was meinst du mit "richtig" konvertiert? Das auf allen Geräten, egal welche Sprache, die Zahl immer mit einem Punkt als DecimalSeparator ausgegeben wird?

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.

Besten Dank so funtkionierts.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:20
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:27
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:42
PS: Ist Boolean.ToString() eigentlich lokalisiert?
Es kommt drauf an, was die bei BoolToStr intern für Parameter verwenden (0 und 1 ist ja in jeder Sprache praktisch gleich)

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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:43
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#10

AW: Float je nach Geräteeinstellung als String convertieren(Punkt oder Komma)

  Alt 2. Okt 2014, 14:52
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?
Nein nein, das macht dein Programm dann schon. Wäre ja blöd, wenn der Server in Indien steht und Du dann in Deutschland eine mit indischen Formatierungsregeln erstellte Anzeige bekämst.
Ob Datenbank oder nicht, einen Wert speichert man niemals lokalisiert ab...
Das steht imho nirgens, aber recht hast Du natürlich.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:56 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