Android 我如何正确地圆化一个浮点数?

Android 我如何正确地圆化一个浮点数?,android,rounding,number-formatting,Android,Rounding,Number Formatting,为什么这些测试表现不同 public void testRoundFloat() { final NumberFormat format = NumberFormat.getNumberInstance(); format.setMaximumFractionDigits(2); format.setMinimumFractionDigits(2); format.setRoundingMode(RoundingMode.HALF_UP); assertE

为什么这些测试表现不同

public void testRoundFloat() {
    final NumberFormat format = NumberFormat.getNumberInstance();
    format.setMaximumFractionDigits(2);
    format.setMinimumFractionDigits(2);
    format.setRoundingMode(RoundingMode.HALF_UP);
    assertEquals("102,345.56", format.format(102345.556f));
}

public void testRoundDouble() {
    final NumberFormat format = NumberFormat.getNumberInstance();
    format.setMaximumFractionDigits(2);
    format.setMinimumFractionDigits(2);
    format.setRoundingMode(RoundingMode.HALF_UP);
    assertEquals("102,345.56", format.format(102345.556d));
}
由于格式的结果为xxx.55,第一次对浮点进行舍入测试失败,第二次对双精度进行舍入测试成功。我正在安卓4.2.2(17级)上运行测试

谢谢
Markus是标准的IEEE 32位浮点,它只能保持大约6位小数的精度。您的第一个测试失败,因为它将文本
102345.556f
转换为内部形式时使用舍入表示

要减少舍入误差,请使用双倍或扩展精度

读得好:

roundedNo=((int)(nFloatt*100))+5)/100 是四舍五入到小数点后2位的最简单方法,但浮点数学中总是有错误,因为它是以2为基数存储和计算的,并以十进制显示