格式Float在小数点后显示2位数

时间:2016-06-04 20:01:11

标签: java

我有一个double val,我试图把它变成浮动(导致我需要传递它的函数接下来浮动)但是我失败了。

我试过a)把它变成双倍,然后用Float.parseFloat和b)把它变成一个字符串。

以下是我的代码:

    DecimalFormat df = new DecimalFormat("#.##");
    df.setMaximumFractionDigits(2);
    df.setRoundingMode(RoundingMode.CEILING);

    Log.i(TAG, "FORMAT = " +df.format(val) );
    String valString = String.valueOf(df.format(val));
    Log.i(TAG, "valString == " + valString );
    float val2 = Float.parseFloat(valString);

但是当我将double或String传递给Float.parseFloat时,我会恢复之前的浮点值。

示例:

FORMAT = 42.86
valString == 42.86
val== 42.857142857142854   **** why?

1 个答案:

答案 0 :(得分:1)

浮点

您使用的是floating-point种类型。浮点是一种计算方法,用于表示分数,以便以计算速度的精度进行折衷。该方法使用十进制数的二进制表示,但此表示不能完美匹配所有数字。因此,您会在分数中看到此类异常额外数字。

字符串格式化是一种分心。真正的问题是了解数字计算机如何处理数字。

BigDecimal

当您关心准确性时,请使用BigDecimal类而不是浮点类型。慢得多但准确。

此类可以在需要时生成浮点数,但请记住,并非每个十进制数都可以表示为浮点数。

用法

示例用法:

  • 对于金钱和簿记,请始终使用BigDecimal
  • 对于2D矢量图形或3D场景渲染(如游戏),请使用浮点,其中计算速度比精度更重要,因为可以忽略分数中的无关额外数字。