• Status: Solved
• Priority: Medium
• Security: Public
• Views: 364

# how to subtract decimal????

hi guys!!!!

i had a program that subtract two double variable.here's my code:

import java.awt.*;
import java.awt.event.*;

public class Try
{

public static void main(String argv[])
{
Frame fr = new Frame();
fr.pack();
fr.setVisible(true);

Panel panel = new Panel();

final TextField tf1 = new TextField(15);
final TextField tf2 = new TextField(15);

final Button subtract = new Button("Minus");
Button clear = new Button("Clear");
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == subtract)
{
double a = new Double(tf1.getText()).doubleValue();
double b = new Double(tf2.getText()).doubleValue();

System.out.println(a-b);
}
}

});

}//End of main

}

OUTPUT:

TF1 = 50.56
TF2 = 25
DIFFERENCE = 25.560000000000002

how would i make it so that it will only return 25.26???

0
rdy1437
• 7
• 4
• 3
• +1
1 Solution

Commented:
That's simply a rounding error resulting from floating point arithmetic. If you need to avoid this then use the BigDecimal class, or simply format your output to two decimal places.
0

Author Commented:
can you provide sample code for this??
0

Commented:
BigDecimal a = new BigDecimal("50.56");
BigDecimal b = new BigDecimal("25");
BigDecimal c = a.subtract(b);
System.out.println(c);

0

Commented:
Floating point numbers are only an approximation (albeit quite an accurate one).
0

Commented:
There is also an excellent tutorial on BigDecimal: http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-cents.html
0

Commented:
// rdy1437, here is the solution:

import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;

public class Try
{
public static void main(String argv[])
{
Frame fr = new Frame();
fr.pack();
fr.setVisible(true);
Panel panel = new Panel();

final TextField tf1 = new TextField(15);
final TextField tf2 = new TextField(15);

final Button subtract = new Button("Minus");
Button clear = new Button("Clear");
{
public void actionPerformed(ActionEvent e)
{
DecimalFormat twoDigits = new DecimalFormat( "0.00" );
if (e.getSource() == subtract)
{
double a = new Double(tf1.getText()).doubleValue();
double b = new Double(tf2.getText()).doubleValue();
double result =(double) a - (double) b;
System.out.println( twoDigits.format(result) );
}
}
});
}//End of main
}
0

Commented:
DecimalFormat object that is initialized with the string "0.00". Each 0 is a format flag that specifies a required digit position in the formatted floating-point number.

pls ask if have any question..

cheers
0

Commented:
vogen,

1. Please avoid proposing answers as it locks the question and make it harder for other experts to contribute.

0

Author Commented:
0

Commented:
Good to hear it helped :-)
0

Commented:
solly, i was only trying to help.. ::(
0

Author Commented:
hey objects how can i give you the points?
0

Commented:
reject the proposed answer, and accept my comment as an answer :)
0

Commented:
0

Commented:
I spent my time and this is what I get
it's not fair
thanks anyway
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.