2016-05-10 3 views
2

Привет, я хочу очень простой расчет. Сначала я использовал double, но поскольку результат может быть большим, чтобы соответствовать двойнику, я впервые в своей жизни использовал bigdecimal. Я получаю сообщение об ошибке, но я понятия не имею, что я сделал не так. Спасибо за помощь!NumberFormatException: бесконечный или NaN?

Мой код:

double cn = 299792458; 
double temp4 = 0; 
BigDecimal en = BigDecimal.valueOf(0); 
BigDecimal mn = BigDecimal.valueOf(0); 
BigDecimal temp = BigDecimal.valueOf(0); 
BigDecimal temp1 = BigDecimal.valueOf(0); 
String temp3 = null; 

//String m.getText() to bigdecimal mn 
mn = new BigDecimal(m.getText().replaceAll(",", "")); 
//cn^2 to double temp4 
temp4 = Math.pow(cn, cn); 
//dobule temp4 to bigdecimal temp 
temp = new BigDecimal(temp4); 
//multiply bigdecimal temp with bigdecimal mn. Saves result to bigdecimal en 
en = temp.multiply(mn); 
//bigdecimal en to string temp3 
temp3 = en.toString(); 
//Set string temp3 to textfield e1 
e1.setText(temp3); 

Код ошибки:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: Infinite or NaN 
at java.math.BigDecimal.<init>(BigDecimal.java:895) 
at java.math.BigDecimal.<init>(BigDecimal.java:872) 
at fysik.actionPerformed(fysik.java:151) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+3

* NumberFormatException: Infinite или NaN *, что не ясно об этом? – Tunaki

+0

Возможная проблема X Y. Почему вы поднимаете '299792458' до силы' 299792458'? – tnw

+0

Downvoter: это простая новичок, но OP предоставил всю необходимую информацию. –

ответ

2

В заявлении

temp4 = Math.pow(cn, cn); 

вы пытаетесь вычислить 299792458 299792458 . Это значение намного превышает емкость double. Я думаю, что вы имели в виду

temp4 = Math.pow(cn, 2); 

или

temp4 = cn * cn; 
+1

Он также превосходит практический диапазон BigDecimal. –

+0

спасибо. Возможно, я должен был проверить свой код, когда был немного бодр. Еще раз спасибо! – JavaProgrammer

2

Корень всех проблем здесь: двойной сп = 299792458; System.out.println (Math.pow (cn, cn));

с Math.pow для этих значений вы получите Infinite который является недопустимым значением для построения BinInteger объекта