解析有效数字后获取垃圾?

时间:2012-06-09 19:18:19

标签: java parsing floating-point

好吧,我有一个测试程序:

public class ParseTest {
    public static void main(String[] args){
        String s = "-0.000051";
        System.out.println(s + " != " + Float.parseFloat(s));
    }
}

并没有在双方都使用相同的数字。这是输出:

-0.000051 != -5.1E-5

那么,为什么不在双方输出相同的数字呢?

1 个答案:

答案 0 :(得分:2)

这是different scientific representation

的相同数字

例如:

100 = 1E2 

0.1 = 1E-1

如何获得相同的表示?

如果您想要相同的表示,请使用BigDecimal

System.out.println(s + " != " + new BigDecimal(s));

谁将其转换为此格式?

当你将原语转换为String时,例如

float f = 100.123;
String result = "" + f; 

它调用Float.valueOf(f),其中inturns调用Float.toString()来调用new FloatingDecimal(f).toJavaFormatString();这就是这个东西被封装的地方