java,float转string,结果错误问题

有一个float类型的数字ff,其值为9999999.99F;
当把它转换成字符串的时候,结果变成了1E07;

当然使用double类型是没有问题的;

试了以下几种方法:
1. float -> long -> double
采用先乘以一个数,再除以这个数的方法;
100、1000时没有效果,结果还是1E07;
10000时精度丢失了,结果变成了9999999.75

  1. BigDecimal
    BigDecimal db = new BigDecimal(ff);
    结果是1000000,只是没有科学计数法表示而已,还是不对

  2. 直接toStirng
    ((Float)(ff)).toString();
    结果是1E07;

  3. DecimalFormat
    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println(df.format(ff));
    结果是10000000.00,还是不行

上面这几种方式,对于普通的float类型的值是基本是可以的;但是对于这里的ff都不行。
各位有什么好的招没有,希望能够处理ff,同时兼容其他的Float类型。
谢谢!

float有精度限制的。float只能表示7位有效数字。

9999999.99F 已经超出了float的精度范围。

换言之, 9999999.99F在内存中存储的值就是 1E07

后面的转换都没用

用String.valueOf(floatValue);

超出精度了 用double型

float只能表示7位有效数字 ,这个数字不能在用这个类型了,支持1楼

BigDecimal最适合你

[code="java"]
DecimalFormat df = new DecimalFormat("0.00");
String newff = df.format(ff);
[/code]
你写的有问题,应该在 DecimalFormat设置精度后,再格式化