# Java Ganzzahl



## Jana (12. Nov 2012)

Während einer Sonderaktion wird ein Rabatt von 10% auf alle Einkäufe mit einem Gesamtbetrag von mehr als $10.00 gewährt. Schreiben Sie ein Programm, das nach dem Gesamtbetrag fragt und den Discountpreis berechnet. Der Gesamtbetrag wird in Cent (als Ganzzahl) eingegeben.

Frage: Bei mir wird keine Ganze Zahl ausgegeben da 0.9 ja ein double ist.
Wie ändere ich das?


```
package test;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    
 int x;
 
 System.out.println("Geben Sie den Gesamtbetrag ein:");
 x=scan.nextInt();
 
 if (x>10.00)
     System.out.println("Discountpreis: " + (x*0.9));
 else 
     System.out.println("Normalpreis: " + x);
 
}
}
```


----------



## Gast2 (12. Nov 2012)

Eine Zahl zu einer Ganzzahl machen kannst du entweder per Math.round (dann wird gerundet), oder mit einem cast auf int.

Das brauchst du bei dir allerdings gar nicht, weil die Aufgabenstellung verlangt, dass die Eingabe in cents erfolgen soll.


----------



## Jana (12. Nov 2012)

cast auf int?


----------



## pappawinni (12. Nov 2012)

(x > (int) (10.00) )
aber vielleicht besser (x > 10)

[EDIT]
aber Preise ? da brauchst du dann vielleicht doch irgendwie Nachkommastellen ?
[/EDIT]


----------



## Volvagia (12. Nov 2012)

```
double d = 1.8d;
int i = (int)d;
```

Dabei werden die Nachkommestellen abgeschnitten, ist also gleichbedeutend mit Math.floor (außer dass es eben int und kein double zurückgibt).

Aber einerseits brauchst du ja wie gesagt keine, und zweitens darfst du *niemals* Geldbeträge als Gleitkommazahl (float oder double) speichern.


----------



## pappawinni (12. Nov 2012)

Volvagia hat gesagt.:


> und zweitens darfst du niemals Geldbeträge als Gleitkommazahl (float oder double) speichern.


Ein Glück, dass du mir das nicht verbieten darfst.


----------



## Volvagia (12. Nov 2012)

Das war eigendlich nicht als Verbot, sondern Warnung gedacht.


----------



## Ark (12. Nov 2012)

Volvagia hat gesagt.:


> Dabei werden die Nachkommestellen abgeschnitten, ist also gleichbedeutend mit Math.floor (außer dass es eben int und kein double zurückgibt).


Falsch, 
	
	
	
	





```
Math.floor()
```
 macht "round down", während diese Casts "round towards zero" bedeuten. Mehr dazu gibt's in den FAQs – auch einige Hinweise zur Ein- und Ausgabe von Gleitkommazahlen. 

Ark


----------



## Pentalon (12. Nov 2012)

So wie ich die Aufgabenstellung verstehe, sollen die Beträge in Cent gespeichert und wohl auch gerechnet werden.
Das ganze kommt dann in ein INT und nicht in ein DOUBLE.
Kassensysteme arbeiten auch mit INT soweit ich das weiss.

Wenn ich also 10$ habe sind das 1000 Cent.
Davon sind 10% 1000 / 10 = 100 Cent.
Die ziehe ich von den 1000 Cent ab, ergibt 900 Cent.

Die Bildschirmausgabe kann man dann machen in dem man 900 / 100 (vor dem Komma) 900 % 100 (nach dem Komma).

```
System.out.println("Discoutbetrag= "+a/100+","+a%100);
```

In der Aufgabe steht vielleicht auch etwas zum Thema Runden (auf und ab).

Pentalon


----------



## Jana (12. Nov 2012)

Danke:toll:


----------



## Volvagia (12. Nov 2012)

Ark hat gesagt.:


> Falsch,
> 
> 
> 
> ...


[OT]Ich denke ich verstehe. Bei positiven Zahlen stimmt es so, bei negativen dreht sich die Rundrichtung der Methoden relativ zur 0 um, bei casts nicht.
Danke. [/OT]


----------

