# "Kaufmännisch runden"



## Rig (30. Nov 2006)

Hallo allerseits,

muss für einen Prog.-Kurs ein Java-Programm schreiben, das Zins- und Zinseszinsentwicklung von verschiedenen Anlagen über x Jahre berechnet. 
Dabei soll "kaufmännisch gerundet" werden, darunter verstehe ich eine Vorteilsnahme der Bank, also Abrunden (auf zwei Nachkommastellen). Dazu finde ich den passenden Befehl nicht. Müsste wieder irgendwas mit math.round sein...wer kann mir weiterhelfen. Danke im Voraus.

Gruß


Der Rig


----------



## jagdfalke (30. Nov 2006)

Math.round ist schon richtig. Nimm doch die Zahl mal 100, runde sie dann und teile anschließend wieder durch 100. Dann hast du's doch...


----------



## SlaterB (30. Nov 2006)

Math.floor oder auf int casten,
vorher *100.0, nachher /100.0

edit:
wenn schon zu spät, dann noch mit Hinweis:
-0.5 und Math.round ergibt das 'Immer abrunden' wie Math.floor


----------



## DocRandom (30. Nov 2006)

Hier hast Du die genaue Description dafür!

mfg
DocRandom


----------



## Fun-Punk (30. Nov 2006)

also ich weis net obs da ne extra Funktion dafür gibt, aber was ne Möglichkeit wäre:
zahl mit 100 multiplizieren, dann in ne integer Zahl umwandeln und dann wieder in ne double und durch 100 teilen, is aber glaub ich nicht soo effizient
also wäre dann zum Beispiel so:

```
double d = 54.07324;
int temp = (int)(d*100);
d = (double)(tmp);
d = d / 100;
```

oder in kurzform:

```
d = ((double)((int)(d*100))) / 100;
```

oh ups zu spät^^


----------



## Rig (30. Nov 2006)

Vielen Dank für die vielen Antworten, werde die Vorschläge ausprobieren.


----------



## Caffè Latte (30. Nov 2006)

Hi,

ich würde die Zahl lassen wie sie ist. Es kann ja später mal weiter damit gerechnet werden und dann hat man  Probleme (z.B. mit dem Finanzamt ). Ich würde einfach nur die Ausgabe entsprechend formatieren. Beispiel aus der Insel:


```
import java.text.*;
public class DezimalFormatTest
{
  public static void main( String[] args )
  {
    double d = 12345.67890;
    DecimalFormat df =   new DecimalFormat  ( ",##0.00" );
    System.out.println(   df.format(d)   );           // 12.345,68
  }
}
```


----------



## jagdfalke (30. Nov 2006)

Das soll glaube ich kein Buchführungsprogramm oder so werden


----------



## Caffè Latte (30. Nov 2006)

jagdfalke hat gesagt.:
			
		

> Das soll glaube ich kein Buchführungsprogramm oder so werden



Glaube ich auch.  Es macht aber in der Praxis keinen Sinn, sein Hirnschmalz für etwas zu opfern, was man nicht braucht. Aber vllt. soll nur geprüft werden, ob die Kiddies noch runden können ...


----------



## jagdfalke (30. Nov 2006)

> Es macht aber in der Praxis keinen Sinn, sein Hirnschmalz für etwas zu opfern, was man nicht braucht.



erzähl das mal nem Lehrer


----------



## trmx (1. Dez 2006)

Ich würde BigDecimal für das Runden verwenden.

also z.B. auf 2 Nachkommastellen "kaufmännisch Runden"


```
double d = 1.2375d;
BigDecimal b = new BigDecimal(d);
b = b.setScale(2,BigDecimal.ROUND_HALF_UP);
```

immer Abrunden wäre dann

```
double d = 1.2375d;
BigDecimal b = new BigDecimal(d);
b = b.setScale(2,BigDecimal.ROUND_DOWN);
```


----------



## Azrahel NA (1. Dez 2006)

trmx hat gesagt.:
			
		

> ```
> double d = 1.2375d;
> ```



Was bitte issn das für ne Zahl?


----------



## SlaterB (1. Dez 2006)

ein double, wer hätte das gedacht,
ist hier bisschen unnötig, da Kommazahlen eh als double zählen,
aber sicher ist sicher


----------

