Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem ze zwykłym mnożeniem - Android


Rekomendowane odpowiedzi

Opublikowano

Witam,

mam problem z tym kodem:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        df.format(kilometers);
        dstTextView.setText("" + kilometers);
    }

Ten kod ma konwertować mile na kilometry z wartości podanej przez użytkownika. Wszelkie liczby dobrze przelicza, z wyjątkiem ..... 3. Po wprowadzeniu takiej odległości (podanej w milach) program to przelicza na kilometry z takim rezultatem:

4.800000000000001 

 

Gdzie jest błąd? Dopiero się uczę programowania pod Androida, więc proszę o wyrozumiałość.

Dziękuję i pozdrawiam. :)

Opublikowano
df.format(kilometers);
dstTextView.setText("" + kilometers);

Tu nie powinno być przypadkiem coś chociażby na ten wzór

kilometers = df.format(kilometers);
dstTextView.setText("" + kilometers);

lub zrobić sobie nową zmienną

float km = df.format(kilometers);
dstTextView.setText("" + km);

Nazewnictwo "przypadkowe". Nie pisałem nigdy w Javie, ale na zdrowy rozum tak to powinno wyglądać, mogę się mylić, ale wątpię.

Opublikowano
df.format(kilometers);
dstTextView.setText("" + kilometers);

Tu nie powinno być przypadkiem coś chociażby na ten wzór

kilometers = df.format(kilometers);
dstTextView.setText("" + kilometers);

lub zrobić sobie nową zmienną

float km = df.format(kilometers);
dstTextView.setText("" + km);

Nazewnictwo "przypadkowe". Nie pisałem nigdy w Javie, ale na zdrowy rozum tak to powinno wyglądać, mogę się mylić, ale wątpię.

 

 

Dzięki za pomoc, zaraz przetestuję i sprawdzę. ;)

 

EDIT:

Kod:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        kilometers = df.format(kilometers);       // tutaj jest blad
        dstTextView.setText("" + kilometers);
    } 

Niestety nie działa, po najechaniu na ten błąd (podkreślony czerwoną linią) mam napisane:

 

Incompatible types

Required: double

Found: java.lang.String

 

Dziwne, bo przecież definiowałem wcześniej tą zmienną jako double, a Stringa, to chyba nigdzie w całej aplikacji nie użyłem.

Opublikowano

 

df.format(kilometers);
dstTextView.setText("" + kilometers);
Tu nie powinno być przypadkiem coś chociażby na ten wzór

kilometers = df.format(kilometers);
dstTextView.setText("" + kilometers);
lub zrobić sobie nową zmienną

float km = df.format(kilometers);
dstTextView.setText("" + km);
Nazewnictwo "przypadkowe". Nie pisałem nigdy w Javie, ale na zdrowy rozum tak to powinno wyglądać, mogę się mylić, ale wątpię.

 

 

Dzięki za pomoc, zaraz przetestuję i sprawdzę. ;)

 

EDIT:

Kod:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        kilometers = df.format(kilometers);       // tutaj jest blad
        dstTextView.setText("" + kilometers);
    } 
Niestety nie działa, po najechaniu na ten błąd (podkreślony czerwoną linią) mam napisane:

 

Incompatible types

Required: double

Found: java.lang.String

 

Dziwne, bo przecież definiowałem wcześniej tą zmienną jako double, a Stringa, to chyba nigdzie w całej aplikacji nie użyłem.

 

 

Przeczytaj błąd...

 

Incompatible types

Required: double

Found: java.lang.String

 

metoda zwraca stringa, ale zmienna wymaga double, musisz to zrobić tak:

String formated = df.format(kilometers);

lub bezpośrednio:

dstTextView.setText(df.format(kilometers));

 

I patrz po prostu co zwraca dana metoda ;)

PS: jak używasz intellijki (lub android studio które na niej działa)

możesz zrobić

df.format(kilometers).var

i kliknąć enter, samo stworzy zmienną odpowiedniego typu.

1438614356923701010629.png

 

Opublikowano

Działa! :}

 

Kod:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        //df.format(kilometers);
        dstTextView.setText(df.format(kilometers) + "");
    }

Dziękuję za pomoc. Wreszcie normalnie mnoży. :p

Opublikowano

Działa! :}

 

Kod:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        //df.format(kilometers);
        dstTextView.setText(df.format(kilometers) + "");
    }
Dziękuję za pomoc. Wreszcie normalnie mnoży. :p

 

Te dodawanie pustego stringa nic nie zmienia :D i nie rób tak nigdy najlepiej, to brzydko wygląda a i gorsze wydajnościowo (ale tego raczej nie zauważysz bo java to sobie naprawi), masz .toString i masz String.valueOf(..)

1438614356923701010629.png

 

Opublikowano

 

Działa! :}

 

Kod:

    private void displayKilometers(int distance){
        TextView dstTextView = (TextView) findViewById(R.id.txtDistanceMiToKm);
        distance = Math.abs(distance);
        double kilometers = distance * 1.6;
        DecimalFormat df = new DecimalFormat("###.##");
        //df.format(kilometers);
        dstTextView.setText(df.format(kilometers) + "");
    }
Dziękuję za pomoc. Wreszcie normalnie mnoży. :p

 

Te dodawanie pustego stringa nic nie zmienia :D i nie rób tak nigdy najlepiej, to brzydko wygląda a i gorsze wydajnościowo (ale tego raczej nie zauważysz bo java to sobie naprawi), masz .toString i masz String.valueOf(..)

 

 

Dzięki za sugestię. :D

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...