# BigDecimal.divide Problem



## neocrom (5. Mai 2009)

```
else if((einheit1.getSelectedIndex()==0)&&(einheit2.getSelectedIndex()==1)){
    userInin.setScale(9);
    userInin=userInin.divide(new BigDecimal(2.54),5);
    userInin=userInin.multiply(new BigDecimal(100));
    erg=userInin+" ";
    }
```

wenn in userInin 32 z.b. steht funktioniert das ganze auch ganz normal aber wenn dort 1 steht gibt es einen Error wieso?Sry falls die Frage dumm ist, aber bin gerade müde und etwas gestresst  mein Umrechner Projekt ist doch etwas größer geworden als erwartet (987 Zeilen Code)


----------



## The_S (6. Mai 2009)

Was für nen Error? Ich hab leider kein Bock dein Code zu kopieren und bei mir einzufügen um es selber rauszufinden - das würde mich stressen ;(


----------



## neocrom (6. Mai 2009)

es ist aufjedenfall ein Runtime error denn komplimieren Tut er Problemlos
 Also so wie ich den Code schnipssel gepostet habt sagt er mir für 1 => 0 das ist ja schonmal aufjedenfall falsch wenn ich das setscale und den rundungs Operator beim aufruf von Divide weglasse:
	
	
	
	





```
else if((einheit1.getSelectedIndex()==0)&&(einheit2.getSelectedIndex()==1)){
    userInin=userInin.divide(new BigDecimal(2.54));
    userInin=userInin.multiply(new BigDecimal(100));
    erg=userInin+" ";
    }
```
 sagt mir Netbeans : 
	
	
	
	





```
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
        at java.math.BigDecimal.divide(BigDecimal.java:1525)
        at mUr.Mf.einheitUVorsilbe(Mf.java:367)
        at mUr.Mf$3.actionPerformed(Mf.java:274)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6108)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
        at java.awt.Component.processEvent(Component.java:5873)
        at java.awt.Container.processEvent(Container.java:2105)
        at java.awt.Component.dispatchEventImpl(Component.java:4469)
        at java.awt.Container.dispatchEventImpl(Container.java:2163)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
        at java.awt.Container.dispatchEventImpl(Container.java:2149)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4295)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
```


----------



## The_S (6. Mai 2009)

Wie wärs mit runden?

BigDecimal (Java Platform SE 6))


----------



## neocrom (6. Mai 2009)

hab ich ja mit setscale und bei divide übergebenen Rundungs parrameter versucht 

aber ich schau mir auhc gleich die DOCS nochmal genau an


----------



## SlaterB (6. Mai 2009)

> userInin.setScale(9);

BigDecimal ist in allen Belangen unveränderbar, selber bei so kleinen Aufrufen musst du schon
userInin = userInin.setScale(9);
schreiben



und dann hast du mal den Scale beim divide angegeben, mal nicht:
> userInin=userInin.divide(new BigDecimal(2.54),5);
> userInin=userInin.divide(new BigDecimal(2.54));

du musst dich schon entscheiden..

--------

noch ein Fallstrick: Konstruktor mit double ist sehr zu misstrauen,
schau dir die Ausgabe hiervon an:

        System.out.println(new BigDecimal(0.26));
        System.out.println(new BigDecimal("0.26"));
        System.out.println(BigDecimal.valueOf(0.26));


----------



## neocrom (6. Mai 2009)

danke dir =) war sehr lehrreich und funktioniert nun


----------

