public class MainActivity extends Activity {
// float f = 533764366.99f;
Long f = 533764366232377L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("=====ff22", formatDoubleData2(f));
Log.d("=====ddd", format(f));
Log.d("=====df", dataComma(String.valueOf(f)));
}
public static String formatDoubleData2(float f) {
DecimalFormat decimalFormat = new DecimalFormat("#");
String p = decimalFormat.format(f);
return p;
}
public static String format(float f) {
BigDecimal bigDecimal = new BigDecimal(f);
String result = bigDecimal.toString();
return result;
}
}
这边要用Long类型来表示大数值,如果你用float会丢失精度,输出的值位
D/=====ff22: 533764352 D/=====ddd: 533764352 D/=====df: 5.33764352E8
浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。
可以考虑采用一些替代方案来实现。如通过 String 结合 BigDecimal 或 者通过使用 long 类型来转换。