Ich kann leicht 2e15
als "zwei Billiarden" auf einen Blick lesen, aber für 2000000000000000
muss ich die Nullen zählen, was länger dauert und zu Fehlern führen kann.Java: Warum kann ich Integer-Typen nicht mit wissenschaftlicher Notation deklarieren?
Warum kann ich nicht erklären, ein int
oder long
eine wörtliche wie 2e9
oder 1.3e6
verwenden? Ich verstehe, dass eine negative Potenz von 10, wie 2e-3
, oder eine Potenz von 10, die kleiner ist als die Anzahl der Dezimalstellen, wie 1.0003e3
, würde eine Gleitkommazahl erzeugen, aber warum Java solche Deklarationen nicht zulassen, und den Gleitkommaabschnitt einfach abschneiden und eine milde Warnung ausgeben, wenn der resultierende Wert nicht ganzzahlig ist?
Gibt es einen technischen Grund, warum dies eine schlechte Idee ist, oder geht es nur um Typ-Sicherheit? Wäre es nicht trivial sein, dass der Compiler einfach eine Aussage zu analysieren wie
long x = 2e12
als long x = 2000000000000 //OK for long
und int y = 2.1234e3
als int y = 2123.4 //warning: loss of precision
[Eric Lippert] (http://blogs.msdn.com/b/ericlippert/archive/2012/04/ 03/10251901.aspx): "Ich werde oft gefragt, warum der Compiler diese Funktion oder diese Funktion nicht implementiert, und natürlich ist die Antwort immer die gleiche: ** weil niemand sie implementiert hat. ** Features beginnen als nicht implementiert und nur dann umgesetzt werden, wenn sich die Leute Mühe geben, sie zu implementieren: keine Anstrengung, kein Feature. Das ist natürlich eine unbefriedigende Antwort, beca normalerweise benutzt die Person, die die Frage gestellt hat, die Annahme, dass das Merkmal so offensichtlich gut ist, dass wir einen Grund haben müssen, es nicht umzusetzen. " –
@BrianRoach: Ich weiß, was eine ganze Zahl ist.Ich habe gefragt, ob es einen bestimmten Grund dafür gibt, warum Zahlen, die in Fließkomma-Form ausgedrückt werden, aber zu einem ** ganzzahligen ** Wert ex: '2.3e3 == 2300 'ausgewertet werden, nicht ohne explizite Umwandlung zugewiesen werden können. Vielleicht ist der Grund, was John Kugelman zitiert. Das würde Sinn machen. Der Grund, warum ich gefragt habe, ist nur, dass ich neugierig war, ob es einen technischen Grund gab, warum solch ein Feature eine schlechte Idee wäre. – odougs
Nein, ich bekomme den ersten Teil ... aber das ist nicht dein zweites Beispiel; 'int y = 2123.4' –