float f=58635.1235f;
double d=15210.2300356985412023689;
System.out.println(f);
System.out.println(d);运行结果是:58635.125
15210.230035698542
我想知道最后哪一位是怎么出来的,四舍五入也不像啊

解决方案 »

  1.   

    这是JVM自动对浮点数处理的结果,没什么可奇怪的,你运行下面的代码:
    double a=1;
    System.out.println(a-0.9);
      

  2.   

    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,本地化后,精度失真了。
      

  3.   

    对精度要求高的计算请用int,long或者BigInteger,BigDecimal