- 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 类型来转换。