问题描述
有一个float类型的数字ff,其值为9999999.99F;当把它转换成字符串的时候,结果变成了1E07;当然使用double类型是没有问题的;试了以下几种方法:1. float -> long -> double采用先乘以一个数,再除以这个数的方法;100、1000时没有效果,结果还是1E07;10000时精度丢失了,结果变成了9999999.752. BigDecimalBigDecimal db = new BigDecimal(ff);结果是1000000,只是没有科学计数法表示而已,还是不对3. 直接toStirng((Float)(ff)).toString();结果是1E07;4. DecimalFormatDecimalFormat 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后面的转换都没用
解决方案二:
DecimalFormat df = new DecimalFormat("0.00");String newff = df.format(ff);你写的有问题,应该在DecimalFormat设置精度后,再格式化
解决方案三:
BigDecimal最适合你
解决方案四:
float只能表示7位有效数字 ,这个数字不能在用这个类型了,支持1楼
解决方案五:
超出精度了 用double型
解决方案六:
用String.valueOf(floatValue);