java.lang.Float#toString() public String toString() { return String.valueOf(value); } java.lang.String#valueOf(float f) public static String valueOf(float f) { return Float.toString(f); } java.lang.Float#toString(float f) public static String toString(float f) { return new FloatingDecimal(f).toJavaFormatString(); } sun.misc.FloatingDecimal#FloatingDecimal(float f) public FloatingDecimal(float f) { int i = Float.floatToIntBits(f); ...... java.lang.Float#floatToIntBits(float value) public static int floatToIntBits(float value) { int result = floatToRawIntBits(value); ...... java.lang.Float#floatToRawIntBits(float value) public static native int floatToRawIntBits(float value); 靠,跟到这里跟不下去了。这里用了JNI,本地化代码。俺这台机器上没有下载JAVA本地化的C的代码,以前在sun的develop里面下载过,要申请个账号的。 不管如何,估计就是因为调用了C,本地化后,精度失真了。
double a=1;
System.out.println(a-0.9);
return String.valueOf(value);
}
java.lang.String#valueOf(float f) public static String valueOf(float f) {
return Float.toString(f);
}
java.lang.Float#toString(float f) public static String toString(float f) {
return new FloatingDecimal(f).toJavaFormatString();
}
sun.misc.FloatingDecimal#FloatingDecimal(float f) public FloatingDecimal(float f) {
int i = Float.floatToIntBits(f);
......
java.lang.Float#floatToIntBits(float value) public static int floatToIntBits(float value) {
int result = floatToRawIntBits(value);
......
java.lang.Float#floatToRawIntBits(float value) public static native int floatToRawIntBits(float value);
靠,跟到这里跟不下去了。这里用了JNI,本地化代码。俺这台机器上没有下载JAVA本地化的C的代码,以前在sun的develop里面下载过,要申请个账号的。
不管如何,估计就是因为调用了C,本地化后,精度失真了。