Reason behind this is
Floats have a fixed number of total bits of precision, which must be shared among the integer and fractional parts. If you use more of those bits to store a larger integer portion (123456 vs. just 12), that leaves fewer for the fractional portion (.4 vs. .45678).
Also, you should be aware that since float and double are base-2 formats, rather than base-10, many values that can be represented with a small, finite number of digits in base-10 cannot be stored in a double or float. For instance, it is impossible to store exactly 1/10 (0.1) in a double or float, just as it's impossible to store 1/3 (0.333...) exactly in a finite number of digits in base-10.
Demonstration code:
public static void main(String args[]) {
double d = 1997500.43;
String s = "1997500.43";
float f = (float) d;
System.out.println(f);//1997500.4
float f3 = Float.parseFloat(s);
System.out.println(f3);//1997500.4
float f4 = Double.valueOf(s).floatValue();
System.out.println(f4);//1997500.4
float f5 = new Double(s).floatValue();
System.out.println(f5);//1997500.4
float xFloat;
Double x = new Double("63.8644951");
xFloat = x.floatValue();
System.out.println(xFloat);// 63.864494
float xFloat2;
Double x2 = new Double("3333263.8644951");
xFloat2 = x2.floatValue();
System.out.println(xFloat2);// 3333263.8
}
Detailed information about floats and doubles is available at : http://www.coderanch.com/t/564234/java/java/Precision-loss-String-Float-double
No comments:
Post a Comment