NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Uživatelem zadaný počet des. míst

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
mkores.mk
Člen
Avatar
mkores.mk:19.3.2017 16:49

Ahoj,

zkouším si vytvořit jednoduchou kalkulačku a mám na sčítání tento kód:

case '1':
                System.out.print("Zadej scitanec: ");
                a = sc.nextDouble();
                System.out.print("Zadej scitanec: ");
                b = sc.nextDouble();
                System.out.print("Zadej pocet desetinnych mist: ");
                c = sc.nextInt();
                vysledek = a + b;
                System.out.print(a + " + " + b " %." + c + "f \n", vysledek);
                break;

Co bych potřeboval je, aby když uživatel zadá počet desetinných míst, aby se mu vrátil výsledek s tímto počtem. Nějak se mi to nedaří dát dohromady :/ Můžu poprosit o pomoc?

 
Odpovědět
19.3.2017 16:49
Avatar
Semjacko
Člen
Avatar
Semjacko:19.3.2017 20:08

No ja by som to spravil tak že z výsledku by som spravil String a potom z neho spravil substring od začiatku po desatinnú čiarku a od desatinnej čiarky + počet desatinných miest. Ale myslím že sa nájde aj nejaké jednoduchšie riešenie :D

 
Nahoru Odpovědět
19.3.2017 20:08
Avatar
mkores.mk
Člen
Avatar
Odpovídá na Semjacko
mkores.mk:19.3.2017 20:24

A jak konkrétně bych udělal substring? :)

 
Nahoru Odpovědět
19.3.2017 20:24
Avatar
Semjacko
Člen
Avatar
Odpovídá na mkores.mk
Semjacko:19.3.2017 20:55
String s = String.valueOf(vysledek);
s = s.substring(0 , s.indexOf("."))  +  s.substring(s.indexOf(".") , s.indexOf(".")+c+1);

Asi takto :)
Samozrejme tam môže nastať výnimka tak to treba ošetriť blokom Try a Catch alebo nejakou podmienkou :)

Editováno 19.3.2017 20:56
 
Nahoru Odpovědět
19.3.2017 20:55
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na mkores.mk
Atrament:19.3.2017 20:59

Můžeš použít DecimalFormat. Když máš v 'c' počet destinných míst, která chceš zobrazit tak asi takhle:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(c);

tím máš vytvořenou instanci DecimalFormat, s nastaveným požadovaným maximem desetinných míst,kterým pak můžeš formátovat 'vysledek' takto:

System.out.println("Vysledek je: " + df.format(vysledek));
 
Nahoru Odpovědět
19.3.2017 20:59
Avatar
Semjacko
Člen
Avatar
Odpovídá na Atrament
Semjacko:19.3.2017 21:01

Toto je oveľa lepšie riešenie :)

 
Nahoru Odpovědět
19.3.2017 21:01
Avatar
mkores.mk
Člen
Avatar
Odpovídá na Atrament
mkores.mk:19.3.2017 21:48

Tohle mi ne úplně korektně funguje :)

mám tedy tento zdroják:

Scanner sc = new Scanner(System.in);
        sc.useLocale(Locale.US);
        System.out.println("Vyber operace (1-soucet, 2-rozdil, 3-soucin, 4-podil)" );
        char operator = sc.nextLine().charAt(0);
        DecimalFormat df = new DecimalFormat();
        boolean error = false;
        double vysledek = 0;
        double b = 0;
        double a = 0;
        int c = 0;
        switch (operator) {
            case '1':
                System.out.print("Zadej scitanec: ");
                a = sc.nextDouble();
                System.out.print("Zadej scitanec: ");
                b = sc.nextDouble();
                System.out.print("Zadej pocet desetinnych mist: ");
                c = sc.nextInt();
                vysledek = a + b;
                df.setMaximumFractionDigits(c);
                System.out.println("Vysledek je: " + df.format(vysledek));
                break;

A výpis z konzole -
Vyber operace (1-soucet, 2-rozdil, 3-soucin, 4-podil)
1
Zadej scitanec: 2.0
Zadej scitanec: 5.11
Zadej pocet desetinnych mist: 0
Vysledek je: 7
= 7.11

Nějak nechápu, proč mi to poté ještě vyhodí "= 7.11"

 
Nahoru Odpovědět
19.3.2017 21:48
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovídá na mkores.mk
Atrament:19.3.2017 21:52

Tak to záleží na tom, co tam potom ještě kde vypisuješ :) Samo se to určitě nevypisuje :)

 
Nahoru Odpovědět
19.3.2017 21:52
Avatar
mkores.mk
Člen
Avatar
Odpovídá na Atrament
mkores.mk:19.3.2017 21:54

Už jsem na to přišel :)

Akorát jak bych to udělal, pokud bych opravdu chtěl při sečtení např.: 5 + 2 aby mi to vrátilo za desetinnou čárkou nuly (pokud by uživatel zadal, aby tam byl počet desetinných míst více jak 0, ale sčítal by celá čísla)

Editováno 19.3.2017 21:55
 
Nahoru Odpovědět
19.3.2017 21:54
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Atrament:19.3.2017 21:58
df.setMinimumFractionDigits(pocet_desetinných_míst);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.3.2017 21:58
Avatar
mkores.mk
Člen
Avatar
Odpovídá na Atrament
mkores.mk:19.3.2017 22:01

Děkuji, už to funguje tak jak si představuju! :)

 
Nahoru Odpovědět
19.3.2017 22:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.