Scala String.format schreibt floats mit Komma -.-?

0x7F800000

Top Contributor
Beispiel:
Code:
scala> "%.5f" format (123.1237123d)
res6: String = 123,12371
1) Wie kann so ein Mist passieren? Hängt es mit irgendwelchen "Locales" zusammen?
2) Wie schalte ich das von Pfund-Pro-Quadratfuß-Grad-Komma-Locale auf das normale menschliche Locale um, wo Gleitpunktzahlen mit Punkt geschrieben werden, wie bei allen normalen Programmiersprachen?

Danke im Voraus.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
1) Wie kann so ein Mist passieren? Hängt es mit irgendwelchen "Locales" zusammen?
Vermutlich ja, siehe unten
2) Wie schalte ich das von Pfund-Pro-Quadratfuß-Grad-Komma-Locale auf das normale menschliche Locale um, wo Gleitpunktzahlen mit Punkt geschrieben werden, wie bei allen normalen Programmiersprachen?
Das ist in Java nicht anders!
Java:
System.out.println(String.format("%.5f", 123.1237123d));
(deutsches Loale)
--->123,12371
Aber...:
Java:
		Formatter formatter = new Formatter(new StringBuilder(), Locale.US);
		System.out.println(formatter.format("%.5f", 123.1237123d));
--->123.12371

In der Scala API jetzt zu suchen obs da auch so etwas gibt, habe ich kb :)
 

0x7F800000

Top Contributor
Okay, anscheinend muss man bei Java-Programmen jedes mal erstmal irgendwelchen lokal-patriotischen Dreck rausprügeln, etwa so:
Code:
import java.util.Locale
Locale.setDefault(Locale.ENGLISH)
Danach funktioniert die Ausgabe der Gleitpunktzahlen korrekt. Bravo, toll gemacht java: "Write once, suck everywhere (except on Norfolk Island)"... :eek:

@eraaaa: ja, danke, hab's jetzt gefunden. Also, im ernst: "Deutsches Locale 123,567"??? Wer hat sich denn bitte so etwas bescheuertes ausgedacht? Es heißt immer und überall "123.567", weil Kommata stets für die Trennung der Argumente benötigt werden (in 99.999% der Sprachen, die ich je gesehen habe). Wer anderer Meinung ist, darf von der Klippe springen, so sieht's aus... :autsch:
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Es heißt immer und überall "123.567", weil Kommata stets für die Trennung der Argumente benötigt werden (in 99.999% der Sprachen, die ich je gesehen habe). Wer anderer Meinung ist, darf von der Klippe springen, so sieht's aus... :autsch:

Es hat doch rein gar nichts mit der Syntax von Java zu tun :bahnhof:
Schreibweise von Zahlen ? Wikipedia
Die DIN-Norm schreibt nun mal Komma als Trennzeichen vor und Java ist so nett und stellt alles so ein, wie die Konfiguration des Rechners vermuten lässt, was genau ist jetzt falsch daran?
 

0x7F800000

Top Contributor
Sowas kommt raus, wenn man etwas irgendwelchen Würstchenlängen-Normierungs-Nazis überlässt... Das kann doch nicht sein, dass Java plötzlich anfängt, mir irgendwelchen unverwertbaren Dreck der Gestalt
Code:
12,34,45,4564,56,4564,546,456,456,456,456,45,6456,756,7,7
statt dem erwarteten
Code:
12,34.45,4564,56,4564.546,456.456,456.456,45.6456,756.7,7
rauszuspucken, nur weil ich zufälligerweise an einem Rechner sitze, der in einem Land steht, in dem irgendwelche Bürokraten auf die grandiose Idee gekommen sind, Kommata statt Punkte zu verwenden? Wenn ich jemals auf die Idee kommen sollte, irgendwelche Programme für Bürokraten zu schreiben (werde ich niemals tun...), würde ich ja vielleicht diese Locale-Klasse mal anguggen, aber bis dahin wäre es mir wesentlich lieber, wenn Hirngespinste von durchgeknallten Bürokraten in meiner von C/C++/C#/Java/Scala/Javascript/Python/Haskell/Lisp/Scheme/Prolog...-dominierten Welt nichts zu suchen hätten.

Es hat doch rein gar nichts mit der Syntax von Java zu tun
Exakt. Und genau deswegen will ich mit der Quipu-Knotenschrift der Inka-Stämme nichts zu tun haben, zumindest nicht bis ich explizit danach frage.
 

XHelp

Top Contributor
Ich weiß zwar nicht, was deinen Gefühlsausbruch verursacht, aber:
Stell dir vor du hast eine GUI gebaut, mit dem festen Glauben, dass die Systemschriftgröße 9 ist. Und auf einem anderen Rechner, wo du es startest ist es plötzlich 12 Punkte. Es kommt natürlich Müll raus und man kann es nicht benutzen. Wie kommst du darauf, dass es ein Problem von Java ist? Es ist schlicht und einfach so, dass DU einen Fehler gemacht hast. Und alle Versuche jemand anderem die Schuld in die Schuhe zu schieben werden da nicht helfen.
Man kann eben nicht davon ausgehen, dass das was du denkst das Richtige ist und alles andere "unverwertbarer Dreck" ist. Es gibt nun man DIN, ISO, Systemeinstellungen und andere Faktoren. Entweder man beachtet die oder lebt damit, dass es zu Fehler kommen kann.
 

Marco13

Top Contributor
Hmm... ಠ_ಠ suspekt... Also, nicht der Sachverhalt sondern die Reaktion. Mich hat es war auch schon irritiert, dass bei
System.out.println(someFloat);
was anderes erscheint als bei
System.out.printf("%f\n", someFloat);
aber man muss wohl einfach damit leben. Selbst Excel verlangt in DE ein Komma statt eines Punktes... Es ist ja nur ein Beispiel. Das zieht sich ja von Trennzeichen über Datumsangaben ("02-03-04" :autsch: ? ) bis zu Zeichensätzen und anderen Stolpersteinen.... :bahnhof:
 

0x7F800000

Top Contributor
Ich weiß zwar nicht, was deinen Gefühlsausbruch verursacht
Sorry wenn ich hier etwas gereizt rüberkomme^^ Hatte ein furchtbares Wochenende, und mich überkam grad wieder mal dieses "ich will nicht mehr auf diesem Planeten leben"-Gefühl...

Natürlich ist es völlig Okay, wenn Java Möglichkeiten zur Verfügung stellt, alles mögliche Regionsabhängig hinzuschreiben, um irgendwelchen Aborigines ihre Getränkerechnung in römischen Zahlen zu präsentieren. Nur möchte ich bitte nichts damit zu tun haben, solange ich nicht selbst danach frage. Insbesondere möchte ich nicht, dass mir Java stillschweigend irgendwelche römische Zahlen reinwürgt, wo ich nicht damit rechne.

Es ist einfach so: ich sitze grad da, schreibe eine rein mathematische Anwendung, die nie etwas von Aborigines oder von Römern oder vom Planeten Erde gehört hat, und an einer Stelle will ich einfach ein paar Daten als Zeichenketten in LaTeX rüberschieben, und kriege plötzlich irgendwelchen Murks mit lauter Kommatas und 390566 Fehler... Da fragt man sich doch unwillkürlich: was zum Teufel haben Traditionen von irgendwelchen Aborigines im Quellcode meines Papers verloren, und warum hält sich Java nicht einfach an die Konventionen der erdrückenden Mehrheit aller Programmiersprachen, bei den ein Punkt schon immer ein Punkt gewesen ist?
 

0x7F800000

Top Contributor
System.out.println(someFloat);
was anderes erscheint als bei
System.out.printf("%f\n", someFloat);
Eben. Stillschweigend & hinterhältig, bin sowas von Java nicht gewohnt^^ ;(
Selbst Excel verlangt in DE ein Komma statt eines Punktes...
Es gibt auch eine normale Version von dem ganzen, es ist also kein Bug sonden Feature? Was ein Glück, dass ich es nie nutzen musste...

Ich kann nur hoffen, dass zumindest in java.lang.Math solche Scherze nicht eingebaut sind, nicht dass da Pi = 4 rausgegeben wird, wenn sich in Indiana mal die Gesetzeslage ändern sollte :autsch:
 

Ähnliche Java Themen

Neue Themen


Oben