Edit Text Negative Decimalzahlen

Hallo,

ich bin noch ziemlich neu in der Android Entwicklung! Im Moment stehe ich vor der Herausforderung, dass ich keine Möglichkeit habe, EditText so zu konfigurieren, dass negative Dezimalwerte akzeptiert werden. Ich kann nur entweder NumberSigned im Input Type festlegen oder eben NumberDecimal, dann werden aber logischerweise nur positive Werte akzeptiert. Wenn ich NumberSigned als EditText Typ auswähle und dann Number Decimal anlege, wird das denke ich mal nichts ändern, oder? Denn der inputType entscheidet ja was ich eingeben darf also vom Keyboard her... Eine Idee von mir wäre einfach Plain Text, dann darf ich jedenfalls alles eingeben, aber wie komme ich dann zu einem DoubleWert, den ich tatsächlich brauche? Mit der Umwandlungsmethode? Also String to Double? Kann es sein, dass es nur so geht? Hintergrund der ganzen Geschichte ist, dass ich Geocoordinaten abfragen und damit rechnen möchte! Ich hab versucht mich auf diversen Websites schlau zu machen, aber die lösen alle nicht wirklich mein Problem... Wenn ich ggf das ganz anders mache und Google Maps implementiere und die Standorte dort auswähle kann ich dann die Werte, die ich bekomme so übertragen, dass ein Rechnen damit möglich ist? Natürlich könnte ich auch einfach Google Earth für die Entfernungsmessung nutzen und dann einfach eingeben, das wird dann sowieso immer ein positiver Wert, und dann damit weiter arbeiten innerhalb meiner App aber ich hätte gern alles aus einer Hand... Ist das irgendwie machbar?

So sieht momentan der Java Code der zugehörigen Klasse aus:

Java:
package com.androidnewcomer.flighthelper;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;

public class RoutePlannerActivity extends AppCompatActivity implements TextToSpeech.OnInitListener, View.OnClickListener {

    private TextToSpeech tts;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_routeplanner);
        tts = new TextToSpeech(this, this);
        Button button=(Button) findViewById(R.id.button);
        button.setOnClickListener(this::onClick);
    }
    @Override
    public void onInit(int status) {
        tts.speak("Please provide the requested values for your start and destination!", TextToSpeech.QUEUE_FLUSH, null, null);
    }
    @Override
    public void onClick(View v) {
        tts.speak("Calculating, please Wait...", TextToSpeech.QUEUE_FLUSH, null, null);
        // Calculations: see CodeBlocks / FlightManager101.cdp
        
        // Activity:
    }
}

Anmerkung: in C++ habe ich bereits ein ansehnliches Konsolenprogramm geschrieben, das diesen Zweck erfüllt, aber ich möchte das Ganze einfach als App am Smartphone haben....

Die XML zur Activity sieht so aus (Auszug):

Java:
<EditText
        android:id="@+id/editTextNumberDecimal5"
        android:layout_width="389dp"
        android:layout_height="55dp"
        android:layout_marginStart="2dp"
        android:layout_marginTop="11dp"
        android:layout_marginEnd="2dp"
        android:layout_marginBottom="307dp"
        android:background="@color/white"
        android:ems="10"
        android:gravity="center_horizontal|center_vertical"
        android:hint="@string/CoordinatesHint0"
        android:importantForAutofill="no"
        android:inputType="numberDecimal"
        android:text="@string/Start"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView17"
        tools:visibility="visible" />

Vielen Dank vorab für eure Hilfe!

LG

Martin
 

Diesen Link habe ich gefunden, da geht man aber davon aus, dass die Koordinaten schon irgendwie in die App gewandert sind und nur noch separat gespeichert und wieder ausgelesen werden müssen. Wenn ich den Code dort richtig verstehe, kann ich den eingegebenen String in GPS Koordinaten umwandeln, das heißt ich erstelle ein PlainText - Feld und gebe einfach die Daten ein und wandle sie dann in GPS Koordinaten um? Aber das wäre ja dann im Endeffekt auch wieder string.toDouble... Verstehe ich das grad richtig?
 
Ok, ich glaube, dass ich die Antwort bereits gefunden habe: Es ist im Grunde völlig egal, was und wie ich es im EditTextFeld eingebe. Es wird sowieso als string behandelt und erst durch die "Parse" - Methode innerhalb der Variablendefinition als das definiert, was es letztendlich sein soll! Lieg ich da richtig?
 

Robert Zenz

Top Contributor
Ja, so in etwa war das. Also ich weisz nicht mehr wie genau das war, aber bei einem meiner Projekte ist es so, dass das EditText auf NumberDecimal gesetzt ist, und zusaetzlich gibt es einen OnBindEditTextListener:

Java:
   EditTextPreference preference = findPreference(preferenceName);
   preference.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
      @Override
      public void onBindEditText(@NonNull EditText editText) {
         editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
         editText.setTextLocale(Locale.ENGLISH);
      }
   });

Damit muesste das Feld dann negative Zahlen zulassen. Aber ganz sicher bin ich mir nicht mehr wie genau das funktioniert hat.
 
Wow danke für die schnelle Antwort! Das ist eine gute Idee, werd ich mal probieren. Ich hätte da grad noch ne Frage: ich habe es nach etwas Recherche geschafft eine Variable zu erstellen, die im C++ long double ist. Ziel war es die Zahl pi möglichst genau abzuspeichern. Wenn ich aber jetzt zum Beispiel einen Winkel ins Bogenmaß umwandeln möchte, dann muss ich ja rein mathematisch gesehen den Winkel im Gradmaß * pi/180 nehmen. Dies lässt er aber nicht zu...
Java:
Long val = new Long("3.1415926535897932384626433832795028841971");
    BigDecimal pi =BigDecimal.valueOf(val);

// (...)

latSArc=latS*pi/180;
lonSArc=lonS*pi/180;
latDArc=latD*pi/180;
lonDArc=lonD*pi/180;

Ich bekomme folgende Meldung: Operator '*' cannot be applied to 'double', 'java.math.BigDecimal'
Interpretiert er in diesem Fall das "*" als Zeiger?
 
ok das hat gefehlt: double circlenum = Double.valueOf(val);

jetzt liefert er keinen Fehler mehr, mal sehen, wenns doch Probleme gibt melde ich mich.

Wie gesagt ich stehe noch ziemlich am Anfang und bin noch etwas unsicher mit Objekten und Methoden.

LG Martin
 
Ja, so in etwa war das. Also ich weisz nicht mehr wie genau das war, aber bei einem meiner Projekte ist es so, dass das EditText auf NumberDecimal gesetzt ist, und zusaetzlich gibt es einen OnBindEditTextListener:

Java:
   EditTextPreference preference = findPreference(preferenceName);
   preference.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
      @Override
      public void onBindEditText(@NonNull EditText editText) {
         editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
         editText.setTextLocale(Locale.ENGLISH);
      }
   });

Damit muesste das Feld dann negative Zahlen zulassen. Aber ganz sicher bin ich mir nicht mehr wie genau das funktioniert hat.
Guten Morgen nochmals,

Kleine Info auch für andere NewComer, die den Thread lesen: Es ist offensichtlich NICHT egal, ob man in EditTextText einliest oder in NumberDecimal.... Es wird nämlich den Variablen auf diese Art kein Wert zugewiesen, das haben Testläufe gezeigt. Ich ließ einen Wert nämlich ausgeben und da stand 0.0, obwohl ich genau diese Variable mit 48.11 definiert hatte. Also bitte, um sicher zu gehen folgt dem Beitrag von Robert Zenz. Ich werde selbiges tun. Danke, danke nochmal @Robert Zenz

LG Martin
 

philanthrop

Bekanntes Mitglied
Schreib s die Rechnung bitte so:

Java:
        Random random = new Random();
        double latS = random.nextDouble() * 360.0;
        double lonS = random.nextDouble() * 360.0;
        double latD = random.nextDouble() * 360.0;
        double lonD = random.nextDouble() * 360.0;

        String sVal = "3.1415926535897932384626433832795028841971";
        BigDecimal pi = new BigDecimal(sVal);

        double latSArc = latS * pi.doubleValue() / 180.0; // dran denken: Java rechnet von links nach rechts hier...
        double lonSArc = lonS * pi.doubleValue() / 180.0;
        double latDArc = latD * pi.doubleValue() / 180.0;
        double lonDArc = lonD * pi.doubleValue() / 180.0;

        System.out.printf("%f %f %f %f %n", latSArc, lonSArc, latDArc, lonDArc);

Alles andere ist Gepfusche.
 

Robert Zenz

Top Contributor
Ich Dödel hatte versucht ein Objekt mit einer Zahl zu multiplizieren --- geht natürlich... lol
Yeah, ich darf wieder auf meine Wiederholung zum Thema Boxing verweisen.

Java:
double latSArc = latS * pi.doubleValue() / 180.0; // dran denken: Java rechnet von links nach rechts hier...
Gibt es einen anderen Weg?

Java:
Long val = new Long("3.1415926535897932384626433832795028841971");
BigDecimal pi =BigDecimal.valueOf(val);
Das ist ohnehin fragwuerdig, weil ein Long hat keien Nachkommastellen. Du willst direkt einen neuen BigDecimal erzeugen:

Java:
BigDecimap pi = new BigDecimal("3.1415926535897932384626433832795028841971");

Ziel war es die Zahl pi möglichst genau abzuspeichern.
Die Idee kannst du ohnehin knicken wenn du mit double arbeitest, Flieszkommazahlen sind nicht so genau. Sie sind, tatsaechlich, sogar recht ungenau und zu einem guten Grad nur Annaehrungen an den eigentlichen Wert. Das faellt bei vielen Operationen nicht auf (Grafik zum Beispiel), aber bei anderen macht es einen deutliche Unterschied (Geld, Rechnungswesen). Daher brauchst du Pi entweder nicht so genau, oder du rechnest alles mit BigDecimal.
 
Zuletzt bearbeitet:
Hallo,

danke an alle für die hilfreichen Tipps.
@M.L. wenn ich den InputType in "numberSigned" umwandle, dann akzeptiert er trotz Feldtyp numberDecimal bzw. EditTextText nur ganzzahlige Werte, die entweder negativ oder positiv sen können. Denn der InputType entscheidet ja nur, was ich eingeben darf, oder? ... Ich brauche aber negative Decimalzahlen, die dann auch als solche abgespeichert werden können.
 

Damit ist zumindest das Problem der Eingabe gelöst. Einfach nur bei Input Type mittels "|" beides definieren!
Wegen allem Weiteren melde ich mich noch, ich bekomme nämlich immer noch 0.0 als Ausgabe. Aber ich werd erst mal die weiteren Tipps befolgen
 
Es funktioniert! Danke danke danke für eure Unterstüzung! Der Grund fürs Ergebnis 0 war, dass ich zweimal ein und dieselbe Activity für zwei unterschiedliche Ausgaben verwendet und dann noch einen denkbar blöden Rechenfehler eingebaut habe: statt Grad * (pi/180) habe ich geschrieben Grad * pi/180. Klammern vergessen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
0x7F800000 "Kommentare" an Dateien hinzufügen/auslesen? [edit: "Metadaten"] Java Basics - Anfänger-Themen 4
D Sound in Frames möglich? EDIT Class Clip Java Basics - Anfänger-Themen 5
S [EDIT] Tiefensuche / Depth-First-Search / Greedy Algorithmus Java Basics - Anfänger-Themen 6
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
A Text zu Morsecode Java Basics - Anfänger-Themen 8
O Java Text Area Zeilenausgabe Java Basics - Anfänger-Themen 7
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
T208 Text Datei individuell benennen. Java Basics - Anfänger-Themen 5
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
M Apache POI PPT - Vertikales Alignment von Text im XSLFAutoShape Java Basics - Anfänger-Themen 2
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
J java.text.DecimalFormat Java Basics - Anfänger-Themen 5
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
S Text-To-Speech mit Java Java Basics - Anfänger-Themen 2
L Text-Adventure Java Basics - Anfänger-Themen 3
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
Harlequin Compiler-Fehler Text Adventure - "Long Output" Fehler Java Basics - Anfänger-Themen 3
S Zeichen zählen kopierter Text Java Basics - Anfänger-Themen 6
D Text als Code in java-forum.com formatieren. Wie ? Java Basics - Anfänger-Themen 3
F Schreibprogramm nur markierten Text in kursiv oder fett schreiben Java Basics - Anfänger-Themen 3
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
M Erste Schritte Verschlüsselung von text Java Basics - Anfänger-Themen 21
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
M Beliebigen Text in *** umwandeln Java Basics - Anfänger-Themen 15
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
H Suche in Text und Markierung Java Basics - Anfänger-Themen 14
H Suche in einem Text Java Basics - Anfänger-Themen 17
F Input/Output Text einlesen lassen Java Basics - Anfänger-Themen 14
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
R Best Practice Palindrom in einem Text finden Java Basics - Anfänger-Themen 18
J Text Datei einlesen Java Basics - Anfänger-Themen 6
L Text und Ganzzahl in einer Dialogbox Java Basics - Anfänger-Themen 5
D Text Adventure Erstellen Java Basics - Anfänger-Themen 10
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
J JTextArea visible ohne Text Java Basics - Anfänger-Themen 3
D Bild zu Text Java Basics - Anfänger-Themen 4
L Text/Befehle zu Programmen senden Java Basics - Anfänger-Themen 1
L Java Text datei nur bis zu einem Punkt auslesen? Java Basics - Anfänger-Themen 3
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
S Java Label hat komischen text Java Basics - Anfänger-Themen 4
F Text anhand bestimmter Trennzeichen in Textteile trennen (netbeans) Java Basics - Anfänger-Themen 7
S Ausgabe von Text Formatieren Java Basics - Anfänger-Themen 6
H Text in einen Button quetschen Java Basics - Anfänger-Themen 3
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
J Zahlen als Text übersetzen Java Basics - Anfänger-Themen 6
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
Z JSlider - Text wird nich angezeigt Java Basics - Anfänger-Themen 0
A Problem mit set.Text und übergabe Java Basics - Anfänger-Themen 2
A Probleme mit equals und get.Text Java Basics - Anfänger-Themen 12
M Text innerhalb Anführungsstriche als "eins" auswerten Java Basics - Anfänger-Themen 5
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
H Text durch Checkbox erscheinen lassen Java Basics - Anfänger-Themen 2
U markierten Text auf Zeichen zuvor/danach pruefen Java Basics - Anfänger-Themen 9
J Dienst zum Text kopieren und Variable hochzählen Java Basics - Anfänger-Themen 7
L Text verschlüsseln Java Basics - Anfänger-Themen 13
M Button mit Bild und Text Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben