这是场景。 我根据从数据库获取的数据动态生成要在 JPanel 上显示的组件。 系统会提示用户输入一个整数,并根据该整数完成一些计算。输出应以十进制值形式给出。因此,我已将答案指定为 double 值,并使用 DecimalFormat 进行格式化。
当我将 double 值传递给 DecimalFormat 的 format() 方法时,即使我没有输入任何值 0,我也会收到错误。
这是错误
java.lang.NumberFormatException: For input string: "∞" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at java.lang.Double.valueOf(Double.java:502) at com.boarding.brdrsbllsys.view.Bills.displayOutput(Bills.java:358) at com.boarding.brdrsbllsys.view.Bills.btnConfirmActionPerformed(Bills.java:186) at com.boarding.brdrsbllsys.view.Bills.access$200(Bills.java:27) at com.boarding.brdrsbllsys.view.Bills$3.actionPerformed(Bills.java:123) 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:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) 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:2746) at java.awt.Component.dispatchEvent(Component.java:4711) 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:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) 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:80) 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)
生成错误的代码片段,
if (gbc.gridx == 1 && gbc.gridy == i + 1) {
textConstraints.gridx = 1;
textConstraints.gridy = i + 1;
newPanel.add(new JLabel(((JTextField) component).getText()), textConstraints);
int days = Integer.parseInt(((JTextField) component).getText().trim());
System.out.println("add num of days");
DecimalFormat df = new DecimalFormat("#.##");
textConstraints.gridx = 3;
double a=water / waterdays * days*1.0;
double boarderWater = Double.valueOf(df.format(a));//error is given in this line
newPanel.add(new JLabel(boarderWater + ""), textConstraints);
continue;
}
请考虑变量 gbc
和 textConstraints
是 GridBagConstraints 对象,water
是 double 变量,waterdays
和 days
是 int 变量。
我的代码应该有什么问题?
最佳答案
简单解释:
除法过程中分母为零时会出现此错误。
输入条件(使用 if else),即分母的值不应等于零。
或者如果你不能提出条件,
设置分母值为零的异常处理,以避免应用程序崩溃。
使用
尝试{//你的代码 }
catch(Exception e){//捕获异常 }
关于java - 为什么我会收到 java.lang.NumberFormatException : For input string: "∞"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51481738/