1

I've written some code which calculate employee's Total overtime,Rate per hour,Total amount based on their overtime,medical,bonus,others etc etc.Here is the code,

    int salary = Integer.parseInt(txt_salary.getText().trim());
    int overtime = Integer.parseInt(txt_overtime.getText().trim());

    double eight = 8;
    double days = 25;
    double dbop = 0;
    double overtimeRate = 1.5;

    //calculate the total hours of overtime
    double Total_Overtime = overtime * overtimeRate;
    String x = (String.valueOf(Total_Overtime)).trim();
    txt_hw.setText(x);

    //calculate overall overtime 
    dbop = salary /days/eight;
    String s = (String.valueOf(dbop)).trim();
    txt_rate.setText(s);

    int med = Integer.parseInt(txt_med.getText().trim());
    int bonus = Integer.parseInt(txt_bonus.getText().trim());
    int other = Integer.parseInt(txt_other.getText().trim());
    int f = med+bonus+other;
    double calc = Total_Overtime * dbop+f;
    String c = (String.valueOf(calc)).trim();
    lbl_total.setText(c);

Why this is giving me the following error when I try to calculate,

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "20000.0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Allowance.btn_calcAllwActionPerformed(Allowance.java:764)
at Allowance.access$500(Allowance.java:18)
at Allowance$5.actionPerformed(Allowance.java:248)
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)

Someone please help me. Can't figure out what I did wrong.

radoh
  • 4,554
  • 5
  • 30
  • 45
Tabassum
  • 25
  • 2
  • 2
  • 8
  • 2
    you should use double type to convert the string "20000.0". With that in mind, you'd also need to make sure that the type storing the converted value is also of type double. – Ousmane D. Mar 30 '17 at 19:00

2 Answers2

4

You are trying to convert a String "20000.0" to an Integer. 20000.0 is NOT a valid integer value, so the conversion fails. You could e.g. try to parse the input as double.

final String text = "20000.0";
try {
  final double value = Double.parseDouble(s);
  final int iValue = (int) value; // Be aware you are loosing precision here
  [...]
} catch (NumberFormatException exception){
  // Proper error handling
}
Stefan Freitag
  • 3,578
  • 3
  • 26
  • 33
  • 1
    Nice one Stefan. I was trying to explain in the exact same way :) I would appreciate having your upvote (on my answer). – Devendra Lattu Mar 30 '17 at 19:06
  • Actually I am not declaring any value like "20000.0". I have 4 textfields like overtime,medical,bonus,others based on which in the Total overtime,Rate per hour,Total amount fields will be give me result. When I am inserting any value in those 4 input textfields then it automatically gives me those exception with those number. – Tabassum Mar 30 '17 at 19:14
  • @Tabassum Inserting any value will cause trouble as you have no exception handling. What happens if you enter 20 in those textfield? Please also highlight line in your code snippet in which line the exception occurred. – Stefan Freitag Mar 30 '17 at 19:21
  • at Allowance.btn_calcAllwActionPerformed(Allowance.java:764) is the 1st line, int salary = Integer.parseInt(txt_salary.getText().trim()); – Tabassum Mar 30 '17 at 19:28
  • @Tabassum That is what I expected. The exception stated that "20000.0" was entered in the textfield. Passing this string to Integer.parseInt causes the exception. Please try to enter 20000 This should work. If you need to process values like 20000.0 then you have to go for Double.parseValue – Stefan Freitag Mar 30 '17 at 19:32
  • OMG!!! I needed to check my predefined salary which was double but I was concern about my input values!!!How silly I am!!! :-/ Thank you so much. :) – Tabassum Mar 30 '17 at 19:51
  • @StefanFreitag would you click commit to start documentation on nfe? http://stackoverflow.com/documentation/numberformatexception – xenteros Apr 10 '17 at 11:09
0

A quick fix (not efficient without error handling) could be the following.

double doubleValue = Double.parseDouble(someValue.getText().trim());
int intValue = (int)doubleValue;

Here you first try to convert whatever string you have to Double and then cast it to integer.
Note: Double.parseDouble will still throw an error if the string is not a number.

Devendra Lattu
  • 2,732
  • 2
  • 18
  • 27